package me.test; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/user") public class UserController { private Map<Long, User> users; private Logger logger = LoggerFactory.getLogger(UserController.class); private static final List<CodeBean> countryCodeList = Arrays.asList( new CodeBean("1", "中国"), new CodeBean("2", "美国") ); public UserController() { users = new HashMap<Long, User>(); User user1 = new User(); user1.setId(1L); user1.setName("zhang3"); user1.setAge(22); user1.setRecMail(true); user1.setHobbies(Arrays.asList("1", "3")); user1.setGender("1"); user1.setCountry("1"); users.put(user1.getId(), user1); User user2 = new User(); user2.setId(2L); user2.setName("li4"); user2.setAge(23); user2.setRecMail(false); user2.setHobbies(Arrays.asList("1", "2")); user2.setGender("2"); user2.setCountry("2"); users.put(user2.getId(), user2); User user3 = new User(); user3.setId(3L); user3.setName("wang5"); user3.setAge(24); user3.setRecMail(false); user3.setHobbies(Arrays.asList("2", "3")); user3.setGender("2"); user3.setCountry("1"); users.put(user3.getId(), user3); } @RequestMapping(value = "/list", method = RequestMethod.GET) public String list(Model model) { logger.debug("list is invoked."); model.addAttribute("userList", users.values()); return "user/list"; } // 准备更新的表单画面 @RequestMapping(value = "/edit", method = RequestMethod.GET) public String edit(@RequestParam("id") Long id, Model model) { logger.debug("edit && GET is invoked."); User user = users.get(id); model.addAttribute("u", user); return "user/edit"; } // 准备更新 @RequestMapping(value = "/edit", method = RequestMethod.POST) public String edit(@Valid @ModelAttribute("u") User user, Errors errors, Model model) { logger.debug("edit && POST is invoked."); // 类型转换,bean validation if (errors.hasErrors()) { logger.debug("edit && POST errors.hasErrors(). " + errors); return "user/edit"; } // 业务逻辑校验 if (user.getAge() != null && user.getAge() < 18) { logger.debug("edit && POST biz check error."); errors.rejectValue("age", "myErrorCode"); return "user/edit"; } users.put(user.getId(), user); return "redirect:list.do"; } // 该方法会在每个 @RequestMapping 方法调用前调用 @ModelAttribute(value = "countryCodeList") public List<CodeBean> getCountryCodeList() { logger.debug("getCountryCodeList() invoked."); return countryCodeList; } }