From 7c7db09d056fc6148969bf4f3e335b489affba8a Mon Sep 17 00:00:00 2001 From: Calvin Date: Mon, 3 Sep 2012 10:39:57 +0800 Subject: [PATCH] =?UTF-8?q?spring=20mvc=E4=BD=BF=E7=94=A8=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=EF=BC=8Curl=E6=9B=B4=E6=9C=89restful=E9=A3=8E?= =?UTF-8?q?=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/account/ProfileController.java | 8 +--- .../web/account/UserAdminController.java | 15 +++---- .../quickstart/web/task/TaskController.java | 40 +++++++++++++------ .../WEB-INF/views/account/adminUserForm.jsp | 2 +- .../webapp/WEB-INF/views/task/taskForm.jsp | 2 +- .../examples/showcase/web/UserController.java | 9 +++-- .../webapp/WEB-INF/views/account/userForm.jsp | 2 +- 7 files changed, 46 insertions(+), 32 deletions(-) diff --git a/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/account/ProfileController.java b/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/account/ProfileController.java index 055092fb..a3318ac2 100644 --- a/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/account/ProfileController.java +++ b/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/account/ProfileController.java @@ -34,17 +34,13 @@ public class ProfileController { } @RequestMapping(method = RequestMethod.POST) - public String update(@Valid @ModelAttribute("user") User user) { + public String update(@Valid @ModelAttribute("preloadUser") User user) { accountService.updateUser(user); updateCurrentUserName(user.getName()); return "redirect:/"; } - /** - * 使用@ModelAttribute, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出Task对象,再把Form提交的内容绑定到该对象上。 - * 因为仅update()方法的form中有id属性,因此本方法在该方法中执行. - */ - @ModelAttribute("user") + @ModelAttribute("preloadUser") public User getUser(@RequestParam(value = "id", required = false) Long id) { if (id != null) { return accountService.getUser(id); diff --git a/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/account/UserAdminController.java b/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/account/UserAdminController.java index 3d870ba4..09b84edb 100644 --- a/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/account/UserAdminController.java +++ b/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/account/UserAdminController.java @@ -28,7 +28,7 @@ public class UserAdminController { @Autowired private AccountService accountService; - @RequestMapping(value = "") + @RequestMapping(method = RequestMethod.GET) public String list(Model model) { List users = accountService.getAllUser(); model.addAttribute("users", users); @@ -42,25 +42,26 @@ public class UserAdminController { return "account/adminUserForm"; } - @RequestMapping(value = "update/{userId}", method = RequestMethod.POST) - public String update(@Valid @ModelAttribute("user") User user, RedirectAttributes redirectAttributes) { + @RequestMapping(value = "update", method = RequestMethod.POST) + public String update(@Valid @ModelAttribute("preloadUser") User user, RedirectAttributes redirectAttributes) { accountService.updateUser(user); - redirectAttributes.addFlashAttribute("message", "更新用户成功"); + redirectAttributes.addFlashAttribute("message", "更新用户" + user.getLoginName() + "成功"); return "redirect:/admin/user"; } @RequestMapping(value = "delete/{id}") public String delete(@PathVariable("id") Long id, RedirectAttributes redirectAttributes) { + User user = accountService.getUser(id); accountService.deleteUser(id); - redirectAttributes.addFlashAttribute("message", "删除用户成功"); + redirectAttributes.addFlashAttribute("message", "删除用户" + user.getLoginName() + "成功"); return "redirect:/admin/user"; } /** - * 使用@ModelAttribute, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出Task对象,再把Form提交的内容绑定到该对象上。 + * 使用@ModelAttribute, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。 * 因为仅update()方法的form中有id属性,因此本方法在该方法中执行. */ - @ModelAttribute("user") + @ModelAttribute("preloadUser") public User getUser(@RequestParam(value = "id", required = false) Long id) { if (id != null) { return accountService.getUser(id); diff --git a/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/task/TaskController.java b/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/task/TaskController.java index 7d3558e9..24577957 100644 --- a/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/task/TaskController.java +++ b/examples/quickstart/src/main/java/org/springside/examples/quickstart/web/task/TaskController.java @@ -9,8 +9,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springside.examples.quickstart.entity.Task; @@ -23,12 +25,12 @@ import com.google.common.collect.Maps; /** * Task管理的Controller, 使用Restful风格的Urls: * - * List page : GET /task/ - * Create page : GET /task/create - * Create action : POST /task/save - * Update page : GET /task/update/{id} - * Update action : POST /task/save/{id} - * Delete action : POST /task/delete/{id} + * List page : GET /task/ + * Create page : GET /task/create + * Create action : POST /task/create + * Update page : GET /task/update/{id} + * Update action : POST /task/update + * Delete action : GET /task/delete/{id} * * @author calvin */ @@ -47,7 +49,7 @@ public class TaskController { sortTypes.put("title", "标题"); } - @RequestMapping(value = "") + @RequestMapping(method = RequestMethod.GET) public String list(@RequestParam(value = "sortType", defaultValue = "auto") String sortType, @RequestParam(value = "page", defaultValue = "1") int pageNumber, Model model) { Long userId = getCurrentUserId(); @@ -60,13 +62,14 @@ public class TaskController { return "task/taskList"; } - @RequestMapping(value = "create") + @RequestMapping(value = "create", method = RequestMethod.GET) public String createForm(Model model) { model.addAttribute("task", new Task()); + model.addAttribute("action", "create"); return "task/taskForm"; } - @RequestMapping(value = "save") + @RequestMapping(value = "create", method = RequestMethod.POST) public String create(@Valid Task newTask, RedirectAttributes redirectAttributes) { User user = new User(getCurrentUserId()); newTask.setUser(user); @@ -76,14 +79,15 @@ public class TaskController { return "redirect:/task/"; } - @RequestMapping(value = "update/{id}") + @RequestMapping(value = "update/{id}", method = RequestMethod.GET) public String updateForm(@PathVariable("id") Long id, Model model) { model.addAttribute("task", taskService.getTask(id)); + model.addAttribute("action", "update"); return "task/taskForm"; } - @RequestMapping(value = "save/{id}") - public String update(@Valid Task task, RedirectAttributes redirectAttributes) { + @RequestMapping(value = "update", method = RequestMethod.POST) + public String update(@Valid @ModelAttribute("preloadTask") Task task, RedirectAttributes redirectAttributes) { taskService.saveTask(task); redirectAttributes.addFlashAttribute("message", "更新任务成功"); return "redirect:/task/"; @@ -96,6 +100,18 @@ public class TaskController { return "redirect:/task/"; } + /** + * 使用@ModelAttribute, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出Task对象,再把Form提交的内容绑定到该对象上。 + * 因为仅update()方法的form中有id属性,因此本方法在该方法中执行. + */ + @ModelAttribute("preloadTask") + public Task getTask(@RequestParam(value = "id", required = false) Long id) { + if (id != null) { + return taskService.getTask(id); + } + return null; + } + /** * 取出Shiro中的当前用户Id. */ diff --git a/examples/quickstart/src/main/webapp/WEB-INF/views/account/adminUserForm.jsp b/examples/quickstart/src/main/webapp/WEB-INF/views/account/adminUserForm.jsp index 363dea90..6ffae83a 100644 --- a/examples/quickstart/src/main/webapp/WEB-INF/views/account/adminUserForm.jsp +++ b/examples/quickstart/src/main/webapp/WEB-INF/views/account/adminUserForm.jsp @@ -18,7 +18,7 @@ -
+
用户管理 diff --git a/examples/quickstart/src/main/webapp/WEB-INF/views/task/taskForm.jsp b/examples/quickstart/src/main/webapp/WEB-INF/views/task/taskForm.jsp index 348c9b02..82a78a4b 100644 --- a/examples/quickstart/src/main/webapp/WEB-INF/views/task/taskForm.jsp +++ b/examples/quickstart/src/main/webapp/WEB-INF/views/task/taskForm.jsp @@ -19,7 +19,7 @@ - +
管理任务 diff --git a/examples/showcase/src/main/java/org/springside/examples/showcase/web/UserController.java b/examples/showcase/src/main/java/org/springside/examples/showcase/web/UserController.java index 1c06c518..c9c2d58a 100644 --- a/examples/showcase/src/main/java/org/springside/examples/showcase/web/UserController.java +++ b/examples/showcase/src/main/java/org/springside/examples/showcase/web/UserController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @@ -50,7 +51,7 @@ public class UserController { } @RequiresRoles("Admin") - @RequestMapping(value = "update/{id}") + @RequestMapping(value = "update/{id}", method = RequestMethod.GET) public String updateForm(@PathVariable("id") Long id, Model model) { model.addAttribute("user", accountService.getUser(id)); model.addAttribute("allStatus", allStatus); @@ -62,8 +63,8 @@ public class UserController { * 演示自行绑定表单中的checkBox roleList到对象中. */ @RequiresPermissions("user:edit") - @RequestMapping(value = "save/{userId}") - public String update(@Valid @ModelAttribute("user") User user, + @RequestMapping(value = "update", method = RequestMethod.POST) + public String update(@Valid @ModelAttribute("preloadUser") User user, @RequestParam(value = "roleList") List checkedRoleList, RedirectAttributes redirectAttributes) { //bind roleList @@ -96,7 +97,7 @@ public class UserController { * 使用@ModelAttribute, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。 * 因为仅update()方法的form中有id属性,因此本方法在该方法中执行. */ - @ModelAttribute("user") + @ModelAttribute("preloadUser") public User getUser(@RequestParam(value = "id", required = false) Long id) { if (id != null) { return accountService.getUser(id); diff --git a/examples/showcase/src/main/webapp/WEB-INF/views/account/userForm.jsp b/examples/showcase/src/main/webapp/WEB-INF/views/account/userForm.jsp index 395511d8..2b42fb46 100644 --- a/examples/showcase/src/main/webapp/WEB-INF/views/account/userForm.jsp +++ b/examples/showcase/src/main/webapp/WEB-INF/views/account/userForm.jsp @@ -33,7 +33,7 @@

综合演示用例

- +
管理用户