【问题标题】:Can I access the values of an enum class from a JSP using EL?我可以使用 EL 从 JSP 访问枚举类的值吗?
【发布时间】:2011-01-15 11:48:10
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java jsp jstl enums el


【解决方案1】:

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

package com.stackoverflow.q2240722;

public class StateBean {

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

}

这样&lt;jsp:useBean&gt;就可以访问了:

<%@ 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>

【讨论】:

    【解决方案2】:

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

    servletContext.setAttribute("statesList", YourEnum.values());
    

    【讨论】:

    • 由于它已经是一个常量,我将它放在应用程序范围内,如有必要,请借助 ServletContextListener。另一种选择是自定义 EL 解析器或 EL 函数,但这有点工作。
    • @BalusC:我已经开始这样做了。我开始认为我一定是在破解正确的方法。
    • 我很确定不需要Arrays.asList() 电话。你可以做servletContext.setAttribute("statesList", YourEnum.values());
    • @Matt Ball - 同意。修复它。
    • 无论如何,+1 用于使用ServletContextListener 确定应用程序范围。
    【解决方案3】:

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

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

    (USState 应该是完全限定的或使用&lt;%@ page import = "..." %&gt; 导入

    【讨论】:

    • 这是我的代码的当前状态。它有效,但我想我一定错过了更简单的方法。
    • 我个人认为这比其他解决方案更易于维护。它很短,您不必依赖可以在您不注意的情况下更改和中断的字符串。在这种情况下,我不会逃避 scriptlet。
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    相关资源
    最近更新 更多