我可以使用 EL 从 JSP 访问枚举类的值吗?

发布于 2024-08-21 11:08:31 字数 321 浏览 8 评论 0原文

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

是否可以访问 USState 列表而不首先将此类列表设置为属性?似乎像枚举这样的静态东西应该始终可用,但我不知道如何做到这一点。

这就是我正在寻找的:(工作除外)

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

I have an enum class USState. I would like to iterate through the states in a JSP.

Is it possible to access a list of USStates without first setting such a list as an attribute? It seems that something as static as an enum should always be available, but I can't figure out how to do it.

Here's what I'm looking for: (except working)

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

关于从前 2024-08-28 11:08:31

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

package com.stackoverflow.q2240722;

public class StateBean {

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

}

这样就可以通过 访问它:

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

You can also consider to wrap it in a Javabean like follows:

package com.stackoverflow.q2240722;

public class StateBean {

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

}

This way it's accessible by <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>
征棹 2024-08-28 11:08:31

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

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

You will have to create a list somewhere on your backing code and pass it as a model parameter. Preferably in an ServletContextListener (as advised by BalusC) and put it in the ServletContext (i.e. application scope):

servletContext.setAttribute("statesList", YourEnum.values());
昔梦 2024-08-28 11:08:31

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

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

USState 应该完全限定或使用 <%@ page import 导入=“...”%>

Note that you can also use a scriptlet (I don't think it's too harmful in such a simple case):

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

(USState should be either fully qualified or imported using <%@ page import = "..." %>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文