Java-константы в JSP
У меня есть класс, который определяет имена различных констант, например
class Constants {
public static final String ATTR_CURRENT_USER = "current.user";
}
Я хотел бы использовать эти константы в JSP без использования кода Scriptlet, например:
<%@ page import="com.example.Constants" %>
<%= Constants.ATTR_CURRENT_USER %>
В нестандартном taglib Apache есть тег, обеспечивающий эту функциональность. Тем не менее, я не могу найти способ загрузить эту taglib. Я начинаю задумываться, не устарел ли он, а функциональность была перенесена в другую (Apache) библиотеку тегов?
Кто-нибудь знает, где я могу получить эту библиотеку, или если она не доступна, если есть какой-то другой способ, которым я могу получить доступ к константам в JSP без использования кода скриптлета?
Ура, Дон
6 ответов
При запуске приложения вы можете добавить класс Constants в servletContext, а затем получить к нему доступ на любой странице jsp.
servletContext.setAttribute("Constants", com.example.Constants);
а затем получить доступ к нему на странице JSP
<c:out value="${Constants.ATTR_CURRENT_USER}"/>
(вам может потребоваться создать геттеры для каждой константы)
Похоже, дубликат доступа констант в JSP (без скриптлета)
Мой ответ был:
Статические свойства не доступны в EL. Обходной путь, который я использую, заключается в создании нестатической переменной, которая присваивает себя статическому значению.
public final static String MANAGER_ROLE = 'manager';
public String manager_role = MANAGER_ROLE;
Я использую lombok для генерации геттера и сеттера, так что это довольно хорошо. Ваш EL выглядит так:
${bean.manager_role}
Полный код на http://www.ninthavenue.com.au/java-static-constants-in-jsp-and-jsf-el
Оказывается, есть еще одна библиотека тегов, которая обеспечивает ту же функциональность. Это также работает для констант Enum.
Я буду использовать jakarta-taglibs-unstandard-20060829.jar в своем проекте, но, вы правы, он, похоже, больше не доступен для скачивания.
У меня есть это в моем pom.xml, чтобы получить эту библиотеку, но я думаю, что она будет работать только потому, что эта библиотека сейчас находится в моем локальном хранилище (я не могу найти ее в официальных хранилищах):
<dependency>
<groupId>jakarta</groupId>
<artifactId>jakarta-taglibs-unstandard</artifactId>
<version>20060829</version>
</dependency>
Я не знаю, есть ли другая альтернатива.
Я надеюсь на это, потому что это был хороший способ доступа к константам в JSP.
Какую функциональность вы хотите использовать? Этот тег может иметь доступ к любому общедоступному полю класса по имени класса и имени поля?
Связывание сценариев выполняется во время компиляции, но для доступа к полям класса taglib необходимо использовать такой API Java, как отражение во время выполнения. Тебе это действительно нужно?
Почему вы хотите напечатать значение константы в JSP? Конечно, вы определяете их так, чтобы в JSP вы могли извлекать объекты из сеанса и запрашивать их перед тем, как представить их?
<% @ page import = "com.example.Constants"%><% @ page import = "com.example.model.User"%><% Пользователь user = (Пользователь) session.getAttribute (Constants.ATTR_CURRENT_USER); %>Добро пожаловать <% = user.getFirstName ()%> h1>