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