Java 以弹簧形式装订一套

Java 以弹簧形式装订一套,java,forms,spring,jsp,Java,Forms,Spring,Jsp,我正在尝试将spring窗体与command对象中的集合绑定 在我的命令类中,我将set定义为 private Set<BParameter> bParameters = new HashSet<BParameter>(); 我的绑定有什么问题?它将是一个数组,Spring将把它转换成一个列表;它还将实例化列表实现-您不需要在命令对象中执行该操作。试用 private List<String> bParameters; public void setBPa

我正在尝试将spring窗体与command对象中的集合绑定

在我的命令类中,我将set定义为

private Set<BParameter> bParameters = new HashSet<BParameter>();

我的绑定有什么问题?

它将是一个数组,Spring将把它转换成一个
列表
;它还将实例化
列表
实现-您不需要在
命令
对象中执行该操作。试用

private List<String> bParameters;

public void setBParameters(List<String> bParameters) {
    this.bParameters= bParameters;
}
public List<String> getBParameters() {
    return bParameters;
}
私有列表b参数;
公共参数(列出BPParameters){
此.bParameters=bParameters;
}
公共列表GetBPParameters(){
返回参数;
}

命令中
对象。这些值可能以字符串形式输入。

使用控制器中的列表

在视图中,您可以使用这种直接的html(不确定这是否适用于spring标记)


我在绑定时没有问题

 private Set<Types> typeses = new HashSet<Types>(0);


  <form:textarea path="typeses" style="width:200px;height:150px"/>
private Set types=新哈希集(0);

我使用Spring3.5。唯一的问题是,由于某种原因,它会在字段上留下[]-标记

我找不到将集合绑定到表单参数的方法。然而,其他建议“使用列表代替”的解决方案对我来说还不够好,因为如果字段是JPA一对多关系的一部分,那么就需要立即获取

因此,到目前为止,我找到的最佳解决方案是将表单发布为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) {
  ..
}

此处的更多信息:

使用列表而不是控制器中的设置。问题解决了。这更像是一个变通办法。如果通过表单直接处理JPA对象,这是不可能的。应该没有必要解决这个问题,但我一直无法通过使用列表而不是控制器中的集合来找到解决方案。问题解决了。我也想知道!:)你是指表单中的所有字段还是什么?当我为字段绑定路径时,例如[]-标记dippers。同样地,我绑定了我的所有字段并去掉了[]-mark。你还能告诉我从哪里获得itemsRow ja ParmValue属性吗?它们是你的集合所持有的对象的属性吗?我无法理解你的问题。itemsRow是jsp中的循环计数器,可以为每个标记设置为varStatus=“itemsRow”>。希望它能帮助你。
private List<String> bParameters;

public void setBParameters(List<String> bParameters) {
    this.bParameters= bParameters;
}
public List<String> getBParameters() {
    return bParameters;
}
<input name="bParameters[{idx}].bParmvalues[0].parmValue" />
 private Set<Types> typeses = new HashSet<Types>(0);


  <form:textarea path="typeses" style="width:200px;height:150px"/>
var person = // .. construct form object here

$.ajax(url, {
  method : 'post',
  contentType : 'application/json',
  data : JSON.stringify(person)
});
@RequestMapping(..)
public void save(@RequestBody Person person) {
  ..
}