2011-09-29 74 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标签