8

我有一个枚举类USState。我想遍历 JSP 中的状态。

USState是否可以在不首先将此类列表设置为属性的情况下访问s 列表?似乎像枚举这样静态的东西应该总是可用的,但我不知道该怎么做。

这就是我要找的:(工作除外)

<c:forEach var="state" items="${USState.values}" >
    <option value="${state}">${state}</option>
</c:forEach>
4

3 回答 3

9

您还可以考虑将其包装在 Javabean 中,如下所示:

package com.stackoverflow.q2240722;

public class StateBean {

    public State[] getValues() {
        return State.values();
    }

}

这样它可以通过以下方式访问<jsp:useBean>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<jsp:useBean id="stateBean" class="com.stackoverflow.q2240722.StateBean" />

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2240722</title>
    </head>
    <body>
        <select>
            <c:forEach items="${stateBean.values}" var="state">
                <option value="${state}">${state}</option>        
            </c:forEach>
        </select>
    </body>
</html>
于 2010-02-10T22:54:02.010 回答
9

您必须在支持代码的某处创建一个列表并将其作为模型参数传递。最好在一个ServletContextListener(如BalusC所建议的那样)并将其放入ServletContext(即应用范围):

servletContext.setAttribute("statesList", YourEnum.values());
于 2010-02-10T22:21:27.087 回答
7

请注意,您也可以使用 scriptlet(在这种简单的情况下,我认为它不会太有害):

<c:forEach var="state" items="<%= USState.values() %>" >

(USState应该是完全合格的或使用导入的<%@ page import = "..." %>

于 2010-02-10T22:40:42.137 回答