简体   繁体   中英

Can I access the values of an enum class from a JSP using EL?

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 USState s 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>

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 (ie application scope):

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

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>

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 = "..." %>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM