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