@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", "宋冬野", "[email protected]")); users.put("hxm", new User("hxm", "889", "黄蓄明", "[email protected]")); users.put("cqh", new User("cqh", "818", "曹清华", "[email protected]")); users.put("yhl", new User("yhl", "808", "杨环路", "[email protected]")); }
//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>
对于浏览器的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"; }
@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 验证用户输入是否合法:
>>Line: 14 >>@NotEmpty(message="username cannot be empty!") public String getUsername(){ return username; } >>import org.hibernate.validator.constraints.NotEmpty;
>>import org.hibernate.validator.constraints.Size;We can also use @Email(message="invalid email format!")
>>import org.hibernate.validator.constraints.Email
//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;
//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的使用方法。