У меня есть класс, который определяет имена различных констант, например.
class Constants {
public static final String ATTR_CURRENT_USER = "current.user";
}
Я хотел бы использовать эти константы в JSP без, используя код скриптлета, например:
<%@ page import = "com.example.Constants" %>
<%= Constants.ATTR_CURRENT_USER %>
Похоже, что в библиотеке тегов Apache нестандартный есть тег, который обеспечивает эту функцию. Однако я не могу найти способ загрузить эту библиотеку тегов. Я начинаю задаваться вопросом, устарел ли он, а функциональность перенесена в другую библиотеку тегов (Apache)?
Кто-нибудь знает, где я могу получить эту библиотеку, или, если она недоступна, есть ли другой способ получить доступ к константам в JSP без использования кода скриптлета?
Ваше здоровье, Дон




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