【发布时间】:2018-01-03 09:32:55
【问题描述】:
我按照教程在 Spring 中处理表单提交。我想用表单填充我的TaskEntity bean,并在我的控制器的taskSubmit 方法中提供这个bean 的值。但是,当我填写表单并点击提交时,此方法中task 的所有属性都为空。相关代码如下:
TaskEntity.java
public class TaskEntity {
private String title;
private String description;
private Date dueDate;
private TaskPriority priority;
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return this.title;
}
public void setDescription(String description)
{
this.description = description;
}
public String getDescription()
{
return this.description;
}
public void setDueDate(Date dueDate)
{
this.dueDate = dueDate;
}
public Date getDueDate()
{
return this.dueDate;
}
public void setPriority(String priority)
{
this.priority = TaskPriority.valueOf(priority);
}
public TaskPriority getPriority()
{
return this.priority;
}
}
addTask.jsp
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>To Do List - Add Task</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/stylesheet.css">
</head>
<body>
<form action="tasks" th:action="@{/tasks}" th:object="${taskEntity}" method="post">
<p>Title: <input type="text" th:field="*{title}" /></p>
<p>Description: <input type="text" th:field="*{description}" /></p>
<p>Due Date: <input type="text" th:field="*{dueDate}" /></p>
<p>Priority: <input type="text" th:field="*{priority}" /></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>
TaskController.java
@Controller
public class TaskController {
private static final String TASKS = "/tasks";
private static final String ADD_TASK = "/addTask";
@Autowired
private TaskEntityDao taskEntityDao;
ObjectMapper mapper = new ObjectMapper();
@RequestMapping(value = TASKS, method = RequestMethod.GET)
public ModelAndView readTasks()
{
return new ModelAndView("tasks");
}
@RequestMapping(value = ADD_TASK, method = RequestMethod.GET)
public String addTask(Model model)
{
model.addAttribute("taskEntity", new TaskEntity());
return "addTask";
}
@RequestMapping(value = TASKS, method = RequestMethod.POST)
public void taskSubmit(@ModelAttribute TaskEntity task)
{
// Fields for 'task' are all null!
taskEntityDao.createTask(task);
readTasks();
}
}
我预计 TaskEntity 传递给带有 model.addAttribute("taskEntity", new TaskEntity()); 的视图会将表单值映射到它的字段,但我一定错过了一些东西。
更新:
我正在从我的 Spring 配置中添加视图解析器代码:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
【问题讨论】:
-
如果在 readTasks() 方法中添加
model.addAttribute("taskEntity", new TaskEntity());会怎样? -
请发布您的 Spring MVC 配置,至少是
ViewResolver(s)。 -
@SotiriosDelimanolis 我已经更新了我的问题,谢谢
-
Thymeleaf不适用于UrlBasedViewResolver,它有自己的ViewResolver用于Thymeleaf,此外,Thymeleaf适用于.html文件,不适用于.jsp.您能否发布在您的网络浏览器中从addTask.jsp生成的最终 html 代码?
标签: java forms jsp spring-mvc thymeleaf