我正在尝试将spring表单与命令对象中的set绑定。
在我的命令类 AInstance 中,我将set定义为
private Set<BParameter> bParameters = new HashSet<BParameter>();
在jsp中我将它绑定为
<form:input path="bParameters " />
<form:input path="bParameters " />
由于它是一个Java Set 所以可能有很多字段。当我提交此表单时,我尝试将设置作为:
Set<BParameter> bParameters = aInstance.getBParameters();
我的设置的大小为0。
我也尝试绑定为
<form:input path="bParameters[${itemsRow.index}].bParmvalues[0].parmValue" />
但是异常
Invalid property 'bParameters[0]' of bean class
我的绑定有什么问题?
答案 0 :(得分:1)
它将成为一个数组,Spring将转换为List
;它还将实例化List
实现 - 您不需要在Command
对象中执行此操作。尝试使用
private List<String> bParameters;
public void setBParameters(List<String> bParameters) {
this.bParameters= bParameters;
}
public List<String> getBParameters() {
return bParameters;
}
在您的Command
对象中。这些价值观可能会以字符串形式出现。
答案 1 :(得分:1)
在控制器中使用List。
在视图中你可以使用这个直接的html(不确定这是否适用于spring标签)。
<input name="bParameters[{idx}].bParmvalues[0].parmValue" />
答案 2 :(得分:1)
我没有绑定问题
private Set<Types> typeses = new HashSet<Types>(0);
<form:textarea path="typeses" style="width:200px;height:150px"/>
我使用的是Spring 3.5。唯一的问题是,它出于某种原因在字段上留下了[] -marks
答案 3 :(得分:0)
我找不到将Set绑定到表单参数的方法。然而,其他建议“使用列表代替”的解决方案对我来说还不够好,因为如果该字段是JPA与急切提取的一对多关系的一部分,using List will cause duplicates
因此,到目前为止我找到的最佳解决方案是将表单作为JSON发布 - 使用Ajax - 而不是。以下是JQuery中的内容:
var person = // .. construct form object here
$.ajax(url, {
method : 'post',
contentType : 'application/json',
data : JSON.stringify(person)
});
请注意,您需要将contentType标记为application/json
在控制器端,您可以使用@RequestBody
注释将其绑定到Java对象:
@RequestMapping(..)
public void save(@RequestBody Person person) {
..
}
此处有更多信息:https://gerrydevstory.com/2013/08/14/posting-json-to-spring-mvc-controller/