У меня есть класс Enum USState
. Я хотел бы выполнить итерации через состояния в JSP.
Действительно ли возможно получить доступ к списку USState
s без первой установки такого списка как атрибут? Кажется, что что-то столь статическое, как перечисление должно всегда быть доступным, но я не могу выяснить, как сделать это.
Вот то, что я ищу: (кроме работы)
<c:forEach var="state" items="${USState.values}" >
<option value="${state}">${state}</option>
</c:forEach>
Вам нужно будет создать список где-нибудь в вашем вспомогательном коде и передайте его как параметр модели. Желательно в ServletContextListener
(как рекомендовано BalusC) и поместить его в ServletContext
(т.е. область приложения):
servletContext.setAttribute("statesList", YourEnum.values());
Обратите внимание, что вы также можете использовать скриптлет (я не думаю, что это слишком вредно в таком простом случае):
<c:forEach var="state" items="<%= USState.values() %>" >
(USState
должен быть либо полностью квалифицирован, либо импортирован с помощью <%@ page import = "..." %>
Вы также можете обернуть его в 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>