Могу ли я получить доступ к значениям перечислимого класса из JSP, используя EL? - PullRequest
8 голосов
/ 11 февраля 2010

У меня есть класс enum USState.Я хотел бы перебрать состояния в JSP.

Возможно ли получить доступ к списку USState s без предварительной установки такого списка в качестве атрибута?Кажется, что всегда должно быть доступно что-то статичное, например enum, но я не могу понять, как это сделать.

Вот что я ищу: (кроме работы)

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

Ответы [ 3 ]

9 голосов
/ 11 февраля 2010

Вы также можете обернуть его в 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>
9 голосов
/ 11 февраля 2010

Вам нужно будет создать список где-нибудь в вашем коде поддержки и передать его в качестве параметра модели. Предпочтительно в ServletContextListener (в соответствии с рекомендациями BalusC) и поместите его в ServletContext (т.е. область применения):

servletContext.setAttribute("statesList", YourEnum.values());
6 голосов
/ 11 февраля 2010

Обратите внимание, что вы также можете использовать скриптлет (я не думаю, что это слишком вредно в таком простом случае):

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

(USState должен быть либо полностью квалифицирован, либо импортирован с использованием <%@ page import = "..." %>

...