2011-09-29 88 views
5

我正面臨從Enum類值填充下拉列表的問題。我的枚舉類代碼爲:
枚舉值作爲下拉列表

package abc.xyz.constants; 

public enum StateConstantsEnum 
{ 
      NEWYORK("NY"), 
      FLORIDA("FL"), 
      CALIFORNIA("CA"), 

    private String fullState; 

    private StateConstantsEnum(String s) 
    { 
     fullState = s; 
    } 

    public String getState() 
    { 
     return fullState; 
    } 
} 

我想填充NEWYORK,佛羅里達和加利福尼亞下拉列表。我創建並添加名單彈簧模型是這樣的:

List<StateConstantsEnum> stateList = new ArrayList<StateConstantsEnum>(Arrays.asList(StateConstantsEnum.values())); 

model.addAttribute("stateList", stateList); 

然後我試圖使用填充在JSP下拉:

<select name="${status.expression}" name="stateLst" id="stateLst"> 
    <option value=""></option> 
     <c:forEach items="${stateList}" var="option"> 
       <option value="${option}"> 
        <c:out value="${option.fullState}"></c:out> 
       </option> 
     </c:forEach> 
</select> 

但我得到一個異常「異常創建:javax.el.PropertyNotFoundException: 類'abc.xyz.constants.StateConstantsEnum'沒有屬性'fullState'。「

如何解決此問題?非常感謝

回答

7

fullState是私有的,getState()是訪問者。

<c:out value="${option.state}"></c:out> 

或將您的獲得者重命名爲getFullstate()

+0

我認爲''是正確的。 – kingori

+0

哎呀..我錯過了一小塊。謝謝。還有一個問題,就是印刷NY,FL,CA,而不是NEWYORK,FLORIDA和CALIFORNIA。任何想法? – BambooBlunder

+2

然後只需使用'$ {option}'。事實上,「全狀態」的名稱是誤導性的。這是相反的。它包含一個州名縮寫。 – BalusC

0
在JSP

你可以使用這樣的:

<form:select path="*"> 
    <form:options items="${stateList}" itemLabel="fullState" /> 
</form:select> 

將提取您清單當然(stateList)的所有元素,如果你不指定itemLabel和項目值,它會需要你的枚舉值 當然你必須設置你的getter來getFullState,並在你的頁面聲明springmvc標籤