Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

enums

jsp

jstl

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 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>
like image 420
Eric Wilson Avatar asked Feb 10 '10 22:02

Eric Wilson


3 Answers

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>
like image 61
BalusC Avatar answered Sep 18 '22 13:09

BalusC


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());
like image 35
Bozho Avatar answered Sep 20 '22 13:09

Bozho


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

like image 29
axtavt Avatar answered Sep 21 '22 13:09

axtavt