Spring MVC 学习笔记6 —— 实现简单的用户管理(2)添加和验证

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

Published At
comments powered by Disqus