2017-07-25 87 views
0

我有一个窗体,其中包含一个对象集合的嵌套字段集列表,由一个表单对象服务器端支持。字段集可以添加或删除客户端。我想提交表单而不关心命令对象中的对象索引或稀疏列表。使用Spring MVC表单提交数组字段的简单方法?

这里是我的控制器方法代码:

@PostMapping("/foobar") 
public String doPost(FoobarForm form) { 
    //... 
} 

在PHP中,导轨等它很容易:

<input name="prop[]"> 

,它会自动填充$_POST["prop"]所有的值。

与Spring MVC的工作,我想这些东西:

  1. <input name="prop[]"> - 不起作用说Invalid property 'prop[]' of bean class [...]: Invalid index in property path 'prop[]'; nested exception is java.lang.NumberFormatException: For input string: ""

  2. <input name="prop"> - 不会绑定到列表类型的bean属性,甚至是多当领域目前。

  3. <input name="prop[${i}]"> - 意味着稀疏表和索引操作,同时支持客户端和服务器端的所有麻烦。当使用强大的Web框架工作时,肯定不是正确的做法。

我想知道为什么我不能只使用属性名称中的[]并让Spring自动创建列表?在Spring JIRA上被问到three times没有任何合理的回应。

+0

你使用什么视图解析器? Thymeleaf,JSP? –

+0

你需要使用SpEl('$ {prop}')。 'prop'从哪里来?显示完整的代码以获得更好的帮助 –

回答

0

Spring form binding使得这更简单。您需要在您的bean中添加List对象,并使用弹簧形式将它绑定到jsp中。

class FoobarForm { 
    List<String> prop; 
} 

在JSP中,如果你需要在一次再<form:input path="prop" /> 显示/编辑值所有。如果你想显示一个接一个,然后使用索引<form:input path="prop[0]" />。在表单中使用正确的CommandName。它会工作。