2013-10-21 62 views
4

如何綁定多選中的枚舉列表?選擇枚舉列表的倍數

這裏是我的類屬性(用的getter/setter):

private List<Color> colors; 

這裏是我的jsp:

<form:select id="colors" path="colors" multiple="true"> 
    <form:option value="" label="..."/> 
    <form:options items="${Color.values}" /> 
</form:select> 

我不可能得到枚舉值作爲數組,因爲它是空的。

感謝您的閱讀。

+0

它看起來像你試圖以靜態的方式訪問你的方法「值」,這對我來說看起來很奇怪,因爲你的屬性「顏色」不是靜態的。 – Julien

+0

「Color.values」來自Enum類Color。我向你展示的類用作表單綁定的commandObject。 – fliim

+0

好的。現在看起來更清楚^^ – Julien

回答

6

你似乎認爲${Color.values}將調用靜態Color.values()方法。這是不正確的。

在Java EE 7(Tomcat 8)之前,JSP EL中不支持靜態方法。 ${Color.values}將搜索名爲Color的屬性,如果找到,請在此對象上調用getValues()。由於在任何範圍內都沒有這樣的對象,因此在選擇框中不會有任何選項。

要做你想做的事情,只需從你的Spring控制器調用Color.values()並將其添加到模型中,例如在allColors屬性名稱下。如果您使用的是Java EE 7在你的JSP

然後使用

<form:options items="${allColors}" /> 

,那麼你可以導入Color類在你的JSP,並使用${Color.values()}

+1

感謝您的回答。請看看我的問題。我有這樣的想法:當用戶提交表單時,我的枚舉列表中的表單對象不會被填充。調用'Color.values()'的問題是OP的問題,但我當然要設置控制器的所有枚舉值。而且所有其他形式支持對象的屬性都很好,問題只存在於填充枚舉列表中。但多選參數發送正常 - 我看到FireBug中所有選定的多選參數值 – MyTitle

+0

我無法重現該問題。你應該創建自己的問題,並顯示你的表單,控制器和命令bean。這一切都很好,我剛剛嘗試一個簡單的例子。 –

0

嘗試這樣的事情來獲得枚舉的列表:

List<Color> colors = Arrays.asList(Color.values()); 

對於給定的枚舉:

public enum Color { 
     blue, 
     red; 
    } 

或你的getter返回數組或列表立刻道:

public Color[] getColors(){ 
     return Color.values(); 
    } 

列表

public List<Color> getColorList(){ 
     return Arrays.asList(Color.values()); 
    }