以弹簧形式绑定一组

时间:2011-07-25 16:51:14

标签: java forms spring jsp

我正在尝试将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

我的绑定有什么问题?

4 个答案:

答案 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/