【发布时间】:2013-10-04 14:26:35
【问题描述】:
美好的一天,我正在学习 Spring MVC,我正在按照 this tutorial 编写我的小型 Web 应用程序,但我将其稍微修改为“任务列表”而不是“用户列表”。有一件事我不清楚,所以我想要求解释。这是我的edit.jsp:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<html>
<head>
<title>Edit task</title>
</head>
<body>
<h1>Edit task</h1>
<form:form method="post" action="/update" modelAttribute="task">
<table>
<tr>
<td>Title</td>
<td><form:input path="title"/></td>
</tr>
<tr>
<td>Description</td>
<td><form:textarea path="description"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Save"/></td>
</tr>
</table>
</form:form>
</body>
</html>
这是我的 HomePageController.java(版本 1)中的方法 editTask:
@RequestMapping("/edit")
public ModelAndView editTask(@RequestParam String id, @ModelAttribute Task task) {
// Retrieve task from the database
task = taskService.getTask(id);
ModelAndView model = new ModelAndView("edit");
model.addObject("task", task);
return model;
}
如果我单击编辑链接来编辑项目(例如 /TaskBook/edit?id=1),则会出现一个表单,但它没有被填充。所以我以这种方式改变了方法(版本2):
@RequestMapping("/edit")
public String editTask(@RequestParam String id, Model model) {
Task task = taskService.getTask(id);
model.addAttribute("task", task);
return "edit";
}
现在,当我编辑任务时会填充表单。我不明白版本 1 中的 model.addObject("task", task) 和版本 2 中的 model.addAttribute("task", task) 有什么区别。任务对象是存储在其他地方还是丢失了?请解释。我使用 Spring Framework 3.2.1。
提前谢谢你。沃杰科技。
编辑: 如果我将 editTask() 更改为下面的代码,它可以工作 - 表单已填充。但是如果提交了一些任务数据,我现在怎么读呢?
@RequestMapping("/edit")
public ModelAndView editTask(@RequestParam String id) {
task = taskService.getTask(id);
ModelAndView model = new ModelAndView("edit");
model.addObject("task", task);
return model;
}
【问题讨论】:
-
帮我一个忙,测试你的第一个
editTask(),但删除@ModelAttribute参数。而是在您的方法中创建Task引用。看看会发生什么。 -
我更改了 editTask() - 请参阅上面的已编辑帖子 - 表单仍未填充。
-
没有同样的效果。完全摆脱
Task参数。在方法中用作Task task = taskService.getTask(id);。此外,将代码放入 cmets 很难阅读。请考虑改为编辑您的答案。 -
所以我删除了 Task 参数并开始工作。所以这可能意味着由 model.addObject("task", task) 设置的任务被作为参数传递的任务覆盖,对吗?如果现在有一些提交,我如何读取任务数据?
标签: spring-mvc