1,創建實體類對象User
???注意要導入 bean-validator.jar?包
package com.yangw.springmvc.entity;import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; import org.springframework.format.annotation.NumberFormat; import org.springframework.format.annotation.NumberFormat.Style; /***
* 這里的這幾個注解是用來驗證字段的
*/ public class User {@NotEmpty(message="用戶名不能為空")private String name;@Length(min=3 ,max=10,message="密碼長度應該在3-10之間")private String password;@NumberFormat(style=Style.NUMBER)@Range(min=1,max=100,message="年齡應該在1-100之間")private int age;public User() {}public User(String name, String password, int age) {this.name = name;this.password = password;this.age = age;}/**
*get set方法這里略去
*/
}/*** Springmvc作服務器端驗證更加簡單* 它支持 JSR303 ,JSR是sun公司專門為java來更新的每一個標準* bean-validator.jar 是hibernate的jar包*/
2,在UserController類中完成 User的添加,顯示所有內容
package com.yangw.springmvc.controller;import java.util.HashMap; import java.util.Map;import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod;import com.yangw.springmvc.entity.User;@Controller @RequestMapping(value="/user") public class UserController{private Map<String,User> users = new HashMap<String,User>();public UserController(){users.put("yangw", new User("yangw","123456",24));users.put("ganw", new User("ganw","123456",25));users.put("wangw", new User("wangw","123456",27));}//只有get請求才處理@RequestMapping(value="/users",method=RequestMethod.GET )public String list(Model model){model.addAttribute("users", users);return "user/list"; }// //鏈接到add頁面時是GET請求,會訪問這段代碼 // @RequestMapping(value="/add",method=RequestMethod.GET ) // public String add(Model model){ // //這里需要提供一個User對象,因為添加的頁面 // 第一種方式 model.addAttribute(new User());// //直接返回到add頁面 // return "user/add"; // }//鏈接到add頁面時是GET請求,會訪問這段代碼@RequestMapping(value="/add",method=RequestMethod.GET )public String add(@ModelAttribute(value="user") User user){//第二種提供一個User對象的方式,因為添加的頁面return "user/add"; }//鏈接到add頁面時是POST請求,會訪問這段代碼@RequestMapping(value="/add",method=RequestMethod.POST)//這個User是一個要被驗證的對象,使用@Validated說明;//緊跟@Validated來寫驗證結果類,用BindingResult表示public String add(@Validated User user,BindingResult br){if(br.hasErrors()){//如果有錯誤,到add界面顯示return "user/add";}users.put(user.getName(), user);return "redirect:/user/users"; }}
3,list.jsp頁面
? 注意加入標簽庫的jar包 jsf-api.jar jsf-impl.jar jstl-1.2.jar
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!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>Insert title here</title> </head> <body><a href="add">添加用戶</a><br/><c:forEach items="${users }" var="um" ><!-- 這里的um是一個個的 鍵值對 -->${um.key}---${um.value.name }---${um.value.password }----${um.value.age } <br/></c:forEach> </body> </html>
4,add.jsp頁面
用到了springmvc的form表單
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib prefix="sf" 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>添加用戶</title> </head> <body><!-- 設置為post請求,并且會自動將表單中的值添加到user中 --><!-- 此時沒有寫action,直接提交會提交給/add --><sf:form method="post" modelAttribute="user"><!-- sf:input path屬性 中設置user對象的屬性名 --><!--這個是服務器端驗證 sf:errors 標簽來輸出 驗證的錯誤信息 -->username:<sf:input path="name"/> <sf:errors path="name"/><br/>password:<sf:password path="password"/><sf:errors path="password"/><br/>age:<sf:input path="age"/><sf:errors path="age"/><br/><input type="submit" value="提交" /></sf:form> </body> </html>
5,web.xml增加編碼過濾器
<filter><filter-name>characterEncoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>
?
6,顯示一個用戶詳細信息
/*** @PathVariable:路徑中的變量**/@RequestMapping(value="/{name}",method=RequestMethod.GET)public String show(@PathVariable String name,Model model){model.addAttribute(users.get(name));return "/user/show"; }
??? show.jsp頁面
<body>username:${user.name }<br/>password:${user.password}<br/>age:${user.age }</body>
??? 為list頁面的增加超級鏈接
<c:forEach items="${users }" var="um" ><!-- 這里的um是一個個的 鍵值對 -->${um.key}---<a href="${um.value.name }">${um.value.name }</a>---${um.value.password }----${um.value.age } <br/></c:forEach>
7,用戶的刪除,更新
/*** 修改用戶,獲取原始用戶頁面信息**/@RequestMapping(value="/{name}/update",method=RequestMethod.GET)public String update(@PathVariable String name,Model model){model.addAttribute(users.get(name));return "/user/update"; }/*** 修改用戶,對提交的數據進行更新操作**/@RequestMapping(value="/{name}/update",method=RequestMethod.POST)public String update(@Validated User user,BindingResult br){if(br.hasErrors()){//如果有錯誤,到add界面顯示return "user/update";}users.put(user.getName(), user);return "redirect:/user/users"; }/*** 刪除用戶**/@RequestMapping(value="/{name}/delete",method=RequestMethod.GET)public String delete(@PathVariable String name){users.remove(name);return "redirect:/user/users"; }
??? update.jsp?和 list.jsp
update.jsp頁面 與add.jsp其實一樣<body><!-- 設置為post請求,并且會自動將表單中的值添加到user中 --><!-- 此時沒有寫action,直接提交會提交給/update --><sf:form method="post" modelAttribute="user">username:<sf:input path="name"/> <sf:errors path="name"/><br/>password:<sf:password path="password"/><sf:errors path="password"/><br/>age:<sf:input path="age"/><sf:errors path="age"/><br/><input type="submit" value="提交" /></sf:form> </body>
<c:forEach items="${users }" var="um" ><!-- 這里的um是一個個的 鍵值對 -->${um.key}---<a href="${um.value.name }">${um.value.name }</a>---${um.value.password }----${um.value.age } ----<a href="${um.value.name }/update">更新</a>---<a href="${um.value.name }/delete">刪除</a><br/></c:forEach>
?