【问题标题】:How to bind a Set<CustomObject> in spring mvc form如何以 spring mvc 形式绑定 Set<CustomObject>
【发布时间】:2011-07-25 18:20:35
【问题描述】:

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

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 将只包含一个值,列表已用于将来的可扩展性)

在 spring 表单中,我将值绑定为

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

但问题是可以有一个表单:选择(向用户呈现多个预定义选项)或表单:输入(用户可以输入任何值)。这必须由另一个对象决定

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

我必须将 PluginConfigParm.paramName 的名称与 PluginParameter.paramName 匹配时进行比较,并且 PluginConfigParm.choices.size() > 0 然后 form:select 将显示填充来自 PluginConfigParm.choices 的值,否则为 form:input会显示出来。

问题很简单:我该怎么做。 任何帮助将不胜感激。

【问题讨论】:

标签: java forms spring jsp


【解决方案1】:

通过在控制器中使用 List 而不是 Set。问题解决了。可能是 Set 没有可以与 spring 形式绑定的 getter/setter。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      例如:

      class person{
      set name<string> = new HashSet<String>()
      }
      
      
      <input type="hidden" path="person.name" name="person.name" value="<%=valueStr%>"/>
      take valueStr = "hello, world"
      

      通过将其作为逗号分隔值.. 设置有效

      它对我有用

      【讨论】:

        猜你喜欢
        • 2012-04-25
        • 1970-01-01
        • 2011-06-26
        • 2015-09-02
        • 1970-01-01
        • 1970-01-01
        • 2014-08-04
        • 1970-01-01
        相关资源
        最近更新 更多