Spring MVC 学习笔记6 —— 实现简单的用户管理(2)添加和验证
Spring MVC 学习笔记6 —— 实现简单的用户管理(2)对user model的增删改查【添加validation】
增加用户:
1. 顶级页面请求写在class头里
在“UserController.java”文件中:顶级页面请求是/user, 故 RequestMapping("/user"),下级请求就写在class里的method中:
1. @RequestMapping("/user")
2. public class UserController {
3.
4. //1. save a value here
5. private Map<String,User> users=new HashMap<String, User>();
6.
7. //2. 创建一个构造函数,把这个值users设置进去, 建立一组数据
8. public UserController(){
9. users.put("sdy", new User("sdy", "888", "宋冬野", "song@song.com"));
10. users.put("hxm", new User("hxm", "889", "黄蓄明", "hung@song.com"));
11. users.put("cqh", new User("cqh", "818", "曹清华", "chen@song.com"));
12. users.put("yhl", new User("yhl", "808", "杨环路", "yang@song.com"));
13. }
2. 对于浏览器的第一个请求,获取用户列表
浏览器第一个请求是{url}/user/users
要对应到list.jsp页面,这个映射就写在public String List中:
1. //3. 先来写list这个方法, model()传值进入users
2. @RequestMapping(value= "/users", method=RequestMethod.GET)
3. public String List(Model model){
4. model.addAttribute("userss",users); //transfer "userss" to ${userss} in /user/list.jsp
5. return "user/list";
6.
7. }
list.jsp页面代码就会这样使用这个users:
1. <c:forEach items="${userss}" var="um"><span style="white-space:pre"> </span><!-- ${userss} -->
2. ${um.value.nickname } <!-- //宋冬野 -->
3. ...<a href="${um.value.username}"> ${um.value.username } </a> <!-- //sdy -->
4. -- ${um.value.password }
5. -- ${um.value.email }<br/>
6. </c:forEach>
3. 浏览器进入user/add,是GET请求。浏览器在user/add中点击“提交”,是user/add中的POST请求。
对于浏览器的user/add 中第一次访问时,是GET请求,先映射add.jsp, 显示add相关表单。
对于在/user/add页面中,点击"提交"后,是POST请求,后端进行的操作是:1. 先判断是否合法,如果是,就增加一条记录,并回到list页面。如果不是,显示提示信息。
3.1首次进入,GET请求:
1. //4. 浏览器请求,GET方法, 跳转到add页面,增加用户
2. /*@RequestMapping(value="/add", method=RequestMethod.GET)
3. public String add(Model model){ // 开启 model driven
4. //开启model driven, 供5中 post使用, 其实是供add.jsp 中 使用:myuser.getUsername()
5. model.addAttribute("User000",new User()); //这里是第1种,key = User000
6. <span style="white-space:pre"> </span>//否则add.jsp找不到User, 相当于第22行:“... new User("宋东燕", ...”
7. return "user/add";
8. } */
9. @RequestMapping(value="/add", method=RequestMethod.GET)
10. public String add(@ModelAttribute("userk") User user) { //第2种:创建对象放在model中,key name = userk
11. return "user/add";
12. }
3.2 页面中点击“提交”,POST请求:
1. @RequestMapping(value="/add", method=RequestMethod.POST)
2. //public String add(User myuser, String abc){
3. public String add(@Validated User user, BindingResult mybr){ //add Validation here,一定要紧跟Validate
4. if (mybr.hasErrors()){
5. //如果有错误,直接跳转到add显示结果, 在add。jsp中显示错误信息
6. return "user/add";
7. }
8. //users is an object:
9. users.put(user.getUsername(), user); // use "user.getUsername()" to get username
10. return "redirect:/user/users"; //client jump to /user/users 客户端跳转
11. }
在/user/add + GET请求时,返回的view:add.jsp
1. <%@taglib uri="http://www.springframework.org/tags/form" prefix="sf"%> <!--导入TagLibrary-->
2. <!-- prefix = sf(springform) 开始使用form 在这里. 没有写Action,直接提交会给 /add -->
3. <sf:form metod="post" modelAttribute="userk">
4. Username: <sf:input path="username"/><sf:errors path="username"></sf:errors><br/>
5. Password: <sf:input path="password"/><sf:errors path="password"></sf:errors><br/>
6. Nickname: <sf:input path="nickname"/><br/>
7. Email:<sf:input path="email"/><sf:errors path="email"></sf:errors><br/>
8. <input type="submit" value="添加用户"/>
9. </sf:form>
====下面是验证我们在add.jsp中的内容是否合法=================
添加 Validata 验证用户输入是否合法:
Step1. First step is plug-in jar package.
JSR 303
google and download: bean-validator.jar
paste it to /WebContent/WEB-INF/lib/
Step2. File: edu/bit/model/User.java
1. >>Line: 14
2. >>@NotEmpty(message="username cannot be empty!")
3. public String getUsername(){
4. return username;
5. }
6.
7. >>import org.hibernate.validator.constraints.NotEmpty;
As the same, we can use @Size(min=1, max=10, message=“password length must be 1-10”)
>>import org.hibernate.validator.constraints.Size;
We can also use @Email(message=“invalid email format!”)
>>import org.hibernate.validator.constraints.Email
Step3: File : “UserController.java”
3.1 Creat Model:
1. //RequestMapping(value="/add", method=RequestMethod.GET)
2. //public String add(Model model){
3. >>
4. public String add(@ModelAttribute("userk") User user){ //Another kind of Create model for add.jsp @@曾经的疑问就在这
3.2
1. //public String add(User myuser, String abc){
2. public String add(@Validated User myuser, BindingResult bResult){
3. //add Validation here,一定要紧跟Validate
4. if (bResult.hasErrors()){
5. //如果有错误,直接跳转到add显示结果, 在add.jsp中显示错误信息
6. return "user/add";
7. }
8. >>import org.springframework.validation.annotation.Validated;
Step4: File :“add.jsp”
//add sf:errors</sf:errors> Tag into the original code ad below:
1. <sf:form metod="post" modelAttribute="userk"><span style="white-space:pre"> </span><!--userk与UserController.java中的userk这个model属性名对应-->
2. Username: <sf:input path="username"/><sf:errors path="username"></sf:errors><br/>
3. Password: <sf:input path="password"/><sf:errors path="password"></sf:errors><br/>
4. Nickname: <sf:input path="nickname"/><br/>
5. Email:<sf:input path="email"/><sf:errors path="email"></sf:errors><br/>
6. <input type="submit" value="添加用户"/>
7. </sf:form>
有个疑问就是Step3里的(@ModelAttribute(“user”) User kuser) 中的 “user” 是对应哪里的user,这个没搞清楚。
下一篇博文详细翻译关于model.addAttribute的使用方法。
http://krams915.blogspot.com/2010/12/spring-3-mvc-using-modelattribute-in.html