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 ()%>

Другие вопросы по тегам