枚举值为下拉列表

时间:2011-09-29 02:23:12

标签: java jsp spring-mvc enums el

我正面临从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,FLORIDA和CALIFORNIA一起填充下拉列表。我正在创建并以这种方式将列表添加到Spring模型中:

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'。“

如何解决此问题?非常感谢

2 个答案:

答案 0 :(得分:7)

fullState是私有的,getState()是访问者。

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

或者将您的getter重命名为getFullstate()

答案 1 :(得分:0)

在JSP中,你可以使用类似的:

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

它将提取你的liste(stateList)中的所有元素,如果你没有指定itemLabel和itemValue,它将获取你的枚举值 当然你必须将你的getter设置为getFullState,并在你的页面中声明springmvc标签