将表单对象绑定到带有前缀的ModelAttribute?

时间:2018-01-16 15:46:29

标签: spring spring-mvc spring-boot

我有一个遗留应用程序,其中包含许多来自先前框架的表单,这些表单需要实体的前缀。例如,具有名称的Item对象的表单字段为:

<input name="item.name" ... />

在我的spring控制器中,我正常使用ModelAttribute:

@ModelAttribute Item item

但绑定失败,因为spring不期望该项的前缀。有没有什么方法可以告诉spring忽略前缀和绑定而不必创建包装器对象或必须从每个表单字段更改前缀?

1 个答案:

答案 0 :(得分:0)

如果您使用jsp作为视图,则还需要在表单中添加modelAttribute,并确保已在Item对象中为表单字段声明了getter。例如:getName()

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:form id="new-item-form"
            method="post"
            modelAttribute="item" ...>
   <input name="item.name" ... />
</form:form>

如果您正在使用Thymeleaf,那么您必须将其XML命名空间添加到您的html中,然后您可以使用 Spring EL 访问Thymeleaf视图中的模型属性,如下所示:

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:th="http://www.thymeleaf.org">
    ...
    <p th:text="${item.name}">Name</p>
    ...
</html>