如何在spring mvc form </custom object>中绑定Set <custom object>

时间:2011-07-25 18:20:36

标签: java forms spring jsp

我有一个与弹簧形式控制器关联的命令对象:

public class PluginInstance {
  private Set<PluginParameter> pluginParameters = new HashSet<PluginParameter>();
  ... some other string/long properties and getter setters...
}

PluginParameter中还有一个包含值

的Set
public class PluginParameter {
  private String parmName;
  private Set<PluginParmvalue> pluginParmvalues = new HashSet<PluginParmvalue>();
  ...some other string/long properties and getter setters...
}

(通常,pluginParmvalues只包含一个值,列表已用于将来的可扩展性)

在弹簧形式中,我将值绑定为

<form:input path="pluginParameters[${itemsRow.index}].pluginParmvalues[0].parmValue" />

但问题是可以有一个表单:select(向用户提供多个预定义选项)或表单:input(用户可以输入任何值)。这必须从另一个对象

决定
public class PluginConfigParm {
  private String parmName;
  private ArrayList<String> choices;
  ...getter setters and other properties
}

我必须将PluginConfigParm.paramName的名称与PluginParameter.paramName匹配,并且PluginConfigParm.choices.size()&gt; 0然后形成:select将显示填充PluginConfigParm.choices的值,否则形成:将显示输入。

问题很简单:我该怎么做? 任何帮助将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

使用List&lt;&gt;而不是Set&lt;&gt;在控制器中。问题解决了。可以设置&lt;&gt;没有可以用弹簧形式绑定的getter / setter。

所以<form:input path="pluginParameters[${itemsRow.index}].pluginParmvalues[0].parmValue" /> 和列表&lt;&gt;在控制器让我的生活更轻松。

答案 1 :(得分:0)

Set不是索引集合,因此我无法使用此语法

pluginParameters[${itemsRow.index}].pluginParmvalues[0].parmValue

答案 2 :(得分:0)

E:

class person{
set name<string> = new HashSet<String>()
}


<input type="hidden" path="person.name" name="person.name" value="<%=valueStr%>"/>
take valueStr = "hello, world"

以逗号分隔值给出..设置工作

它为我工作