2011-07-25 28 views
2

我有一個彈簧形式控制器相關聯的命令對象:如何結合一個Set <CustomObject>在彈簧MVC形式

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

的PluginParameter還具有一組在它其中包含的值

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

(通常,pluginParmvalues將僅包含一個值,一個列表已經被用於未來擴展)

在彈簧形式I結合值作爲

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

但事情是可以有一種形式:select(向用戶呈現多個預定義選項)或form:input(用戶可以輸入任何值)。這必須從另一個對象

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

在那裏我有當它們匹配和PluginConfigParm.choices.size()> 0,則形式PluginConfigParm.paramName的名稱與PluginParameter.paramName比較決定:選擇將被顯示填充來自PluginConfigParm.choices的值,否則將顯示輸入。

問題很簡單:我該怎麼做。 任何幫助將不勝感激。

+0

難道你不問這個問題嗎? http://stackoverflow.com/questions/6819616/bind-a-set-in-a-spring-form –

+0

問題是一樣的,但有兩種可能的解決方案,我想,請幫助我,如果你明白我的問題,我我搞得很糟糕。 –

回答

1

通過使用列表<>而不是在控制器中設置<>。問題解決了。可能被設置爲<>沒有getter/setter可以用彈簧形式綁定。

所以<form:input path="pluginParameters[${itemsRow.index}].pluginParmvalues[0].parmValue" /> 和列表<>在控制器使我的生活更輕鬆。

0

的設置是不是一個索引集合,所以我不能使用此語法

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

如工作:通過給它作爲逗號分隔值

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


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

..套作品

它爲我工作