数据绑定

数据绑定:

数据绑定是将用户输入绑定到领域对象模型的一种特性。

数据绑定的好处:

1.帮助解析字符串,转换成相应的数据类型

2.另一个好处,在进行输入验证时(数据绑定与数据验证知识点结合使用):当输入验证失败时,它会重新生成一个HTML表单。手工编写HTML代码时,必须记住之前输入的值,重新填入输入的字段。有了Spring的数据绑定和表单标签库后,他们就会替你完成这些工作。

下面只是展示数据绑定部分:

1.目录结构

2.domain类

Book类

package domain;

public class Book {
	//书的id号
    private long id;
    //书的国际编号
    private String isbn;
    //书的名称
    private String title;
    //书的类别
    private Category category;
    //书的作家
    private String author;
    //书的价格
    private double price;
    
	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public Book() {
		super();
	}

	
	public Book(long id, String isbn, String title, Category category, String author, double price) {
		super();
		this.id = id;
		this.isbn = isbn;
		this.title = title;
		this.category = category;
		this.author = author;
		this.price = price;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getIsbn() {
		return isbn;
	}

	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public Category getCategory() {
		return category;
	}

	public void setCategory(Category category) {
		this.category = category;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}
    
}

Category类:(注:category   意思:类别)

package domain;
//类别类
public class Category {
      private int id;
      private String name;
      
	public Category() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Category(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
      
}

3.Controller类:

package Controller;
import java.util.List;

import org.apache.commons.logging.Log;
/*
 *  <!-- 书的作家 -->
    <!-- <td>${book.Author }</td>-->
 */
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import domain.Book;
import domain.Category;
import service.BookService;
@Controller
public class bookController {
	 //通过依赖注入
	  @Autowired
	  private BookService bookservice;
	  
	  private static final Log logger=LogFactory.getLog(bookController.class);
//--------------------------图书展示部分---------------------
	  /*
	   * 图书表单展示
	   */
	  @RequestMapping(value="/listBook")
	  String bookList(Model model) {
		 
	    model.addAttribute("books",bookservice.getBooks());
	    model.addAttribute("book",new Book());
		return "BookList";
	  }
	  
//------------------------图书表单添加部分---------------------	  
	  /*
	   * 图书添加表单
	   */
	  @RequestMapping(value="/inputBook")
      String addBook(Model model){
		model.addAttribute("categorys", bookservice.getAllCategorys());
	    model.addAttribute("book",new Book());
		return "BookAddForm";
      }
	  
	  /*
	   * 图书保存
	   */
	  @RequestMapping(value="/bookSave")
	  String bookSave(@ModelAttribute Book book) {
		  //获取图书类别
		  Category category=bookservice.getCategoryById(book.getCategory().getId());
		  //添加图书类别
		  book.setCategory(category);
		  //获取当前最大编号
		  long num=bookservice.getnum()+1;
	      //设置图书编号
		  book.setId(num);
		  //保存图书
		  bookservice.save(book);
		  return "redirect:/listBook";
	   }
	  
//-------------------------图书更新部分----------------------	  
	  /*
	   * 图书编辑
	   */
	  @RequestMapping(value="/edit/{id}")
	  String edit(Model model,@PathVariable Long id) {
		//获取图书类别
		List<Category> categorys=bookservice.getAllCategorys();
		model.addAttribute("categorys",categorys);
		//获取图书
	   Book book=bookservice.getBookById(id);
		model.addAttribute("book",book);
		return "BookEditForm";
	  }
	  
	  /*
	   * 图书更新
	   */
	  @RequestMapping(value="/edit/update")
	  String update(@ModelAttribute Book book) {
		//通过浏览器传来的类型编号获取图书类型编号
		int n=book.getCategory().getId();
		Category category=bookservice.getCategoryById(n);
		book.setCategory(category);
		//进行图书更新
		System.out.println("ojidgjkgm");
		System.out.println(book.getId());
		bookservice.update(book);
		//设置图书类型
		return "redirect:/listBook";  
	  }
}

4.Service类:

接口:

package service;

import java.util.List;

import domain.Book;
import domain.Category;
/*
 * 接口为表单提书籍服务
 * 包括增删改查
 */
public interface BookServiceInf {
//---------书籍类别-------------
    //获取所有书籍类型对象
    List<Category> getAllCategorys();
  //获取Category
  	Category getCategoryById(int n);
//--------- 书籍 ----------------
    //获取所有书籍
    List<Book> getBooks();
    //书籍添加
    Book save(Book book);
    //获取当前编号
    Long getnum();
    //书籍更新
    Book update(Book book);
    //获取书籍编号
    int getId();
    //通过编号获取书籍
    Book getBookById(Long id);
}

BookService类:

package service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import domain.Book;
import domain.Category;
@Service
public class BookService implements BookServiceInf{
    //目录表
	List<Category> categorys=new ArrayList<Category>();
	//书籍表
	List<Book> bookList=new ArrayList<Book>();
	
	public BookService() {
		Category c1=new Category(1, "computer");
		Category c2=new Category(2, "economics");
		Category c3=new Category(3,"law");
		categorys.add(c1);
		categorys.add(c2);
		categorys.add(c3);
		
		
		bookList.add(new Book(1, "9780980839623", "jsp", c1, "budi",56.9));
		bookList.add(new Book(2, "9780980839624", "spring mvc", c1, "moke",45));
		bookList.add(new Book(3, "9780980839625", "IBM", c2, "chaozong",78));
		bookList.add(new Book(4, "9780980839626", "manage", c2, "yangzong",89));
	}
	@Override
	public List<Category> getAllCategorys() {
		
		return categorys;
	}

	@Override
	public List<Book> getBooks() {
		
		return bookList;
	}

	@Override
	public Book save(Book book) {
		bookList.add(book);
		return book;
	}

	@Override
	public Book update(Book book) {
		Long bookNumber=book.getId();
		for (int i = 0; i < bookList.size(); i++) {
			if(bookList.get(i).getId()==book.getId()) {
				bookList.set(i, book);
			}
			
		}
//		for (Book book2 : bookList) {
//			if(book2.getId()==bookNumber) {
//				System.out.println("匹配成功!!!");
//				bookList.set((int)bookNumber, book);
//			}
//		}
		return null;
	}
	@Override
	public int getId() {
		// TODO Auto-generated method stub
		return 0;
	}
	@Override
	public Category getCategoryById(int n) {
		for (Category category : categorys) {
			if(category.getId()==n) {
				return category;
			}
		}
		return null;
	}
	@Override
	public Long getnum() {
	return (long) bookList.size();
	}
	@Override
	public Book getBookById(Long n) {
		System.out.println(n);
		for (Book book : bookList) {
			if(book.getId()==n) {
				return book;
			}
		}
		return null;
	}
}

4.配置

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
    <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/config/springmvc-config.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

springmvc-config.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
                        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
                        http://www.springframework.org/schema/context   
                       http://www.springframework.org/schema/context/spring-context-4.3.xsd  
                        http://www.springframework.org/schema/mvc   
                        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">  
    <context:component-scan base-package="Controller"/>
    <context:component-scan base-package="service"/>
    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>  

5.JSP页面

BookList页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <!-- JSTL声明 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@   page   isELIgnored="false"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Book List</title>
</head>
<body>

<h1>Book List</h1>
<a href="<c:url value="/inputBook"/>">Add a book</a>
<table>
<!--表头  -->
<tr>
<!-- 书的类别 -->
<th>Category</th>
<!-- 书的名称  -->
<th>Title</th>
<!-- 书的国际编号 -->
<th>Isbn</th>
<!--书的作家  -->
<th>Author</th>
</tr>
<c:forEach items="${books }" var="book">
  <tr>
    <!-- 书的类名 -->
    <td>${book.category.name}</td>
    <!-- 书的名称 -->
    <td>${book.title }</td>
    <!-- 书的国际编号 -->
    <td>${book.isbn }</td>
    <!-- 书的作家 -->
    <td>${book.author }</td>
    <!-- 书的价格 -->
    <td>${book.price }</td>
    <td><a href="edit/${book.id }">Edit</a></td>
  </tr>
</c:forEach>

</table>
</body>
</html>

BookAddForm页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Add a book</title>
</head>
<!--书的属性包括:书的类别,书的名称,书的国际编码,书的作家  -->
<body>
     <form:form commandName="book" action="bookSave" method="post">
       <fieldset>
       <legend>Add  a  book</legend>
       <table>
       <!-- 书的类别 -->
       <tr>
       <td><label>category:</label></td>
       <!-- 书的类别进行选择输入 -->
       <td><form:select 
           id="category" 
           path="category.id"
           items="${categorys }"
           itemLabel="name"
           itemValue="id"
           />
       </td>
       </tr>
       <!-- 书的名称 -->
       <tr>
       <td><label>Title:</label></td>
       <td><form:input id="title" type="text" path="title"/></td>
       </tr>
       <!-- 书的国际编码 -->
       <tr>
       <td><label>Isbn:</label></td>
       <td><form:input id="isbn" type="text" path="isbn"/></td>
       </tr>
       <!-- 书的作家 -->
       <tr>
       <td><label>Author:</label></td>
       <td><form:input id="author" type="text" path="author"/></td>
       </tr>
       <!-- 书的价格 -->
       <tr>
       <td><label>Price:</label></td>
       <td><form:input id="price" type="text" path="price"/></td>
       </tr>
       </table>
       <input type="reset"/>
       <input type="submit"/>
       </fieldset>
     </form:form>
</body>
</html>

BookEditForm页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Edit a book</title>
</head>
<!--书的属性包括:书的类别,书的名称,书的国际编码,书的作家  -->
<body>
     <form:form commandName="book" action="update" method="post">
       <fieldset>
       <legend>Edit  a  book</legend>
       <form:hidden id="id" path="id"/>
       <table>
       <!-- 书的类别 -->
       <tr>
       <td><label>category:</label></td>
       <!-- 书的类别进行选择输入 -->
       <td><form:select 
           path="category.id"
           items="${categorys }"
           itemLabel="name"
           itemValue="id"
           /></td>
       </tr>
       <!-- 书的名称 -->
       <tr>
       <td><label>title:</label></td>
       <td><form:input id="title" type="text" path="title"/></td>
       </tr>
       <!-- 书的国际编码 -->
       <tr>
       <td><label>Isbn:</label></td>
       <td><form:input id="isbn" type="text" path="isbn"/></td>
       </tr>
       <!-- 书的作家 -->
       <tr>
       <td><label>Author:</label></td>
       <td><form:input  id="author" type="text" path="author"/></td>
       </tr>
       <!-- 书的价格 -->
       <tr>
       <td><label>Price:</label></td>
       <td><form:input type="text" id="price" path="price"/></td>
       </tr>
       </table>
       <input type="reset"/>
       <input type="submit"/>
       </fieldset>
     </form:form>
</body>
</html>

6.结果截图:

图书列表:


图书添加列表:


图书添加完成列表:


图书编辑列表:



编辑之后:


猜你喜欢

转载自blog.csdn.net/qq_32067151/article/details/80273773