Java константи в JSP

Имам клас, който дефинира имената на различни константи, напр.

class Constants {
    public static final String ATTR_CURRENT_USER = "current.user";
}

Бих искал да използвам тези константи в JSP без да използвам Scriptlet код като:

<%@ page import="com.example.Constants" %>
<%= Constants.ATTR_CURRENT_USER %>

Изглежда, че има етикет в Apache нестандартен taglib, който предоставя тази функционалност. Въпреки това не мога да намеря начин да изтегля този taglib. Започвам да се чудя дали е отхвърлен и функционалността е преместена в друга (Apache) библиотека с етикети?

Някой знае ли къде мога да получа тази библиотека или ако не е налична, ако има някакъв друг начин да получа достъп до константи в JSP, без да използвам скриптов код?

Наздраве, Дон


person Dónal    schedule 24.09.2008    source източник


Отговори (6)


При стартиране на приложението можете да добавите класа Constants към servletContext и след това да получите достъп до него във всяка jsp страница

servletContext.setAttribute("Constants", com.example.Constants);

и след това достъп до него в jsp страница

<c:out value="${Constants.ATTR_CURRENT_USER}"/>

(може да се наложи да създадете гетери за всяка константа)

person ncgz    schedule 24.09.2008
comment
Наистина искам да избегна създаването на гетери за всяка константа - person Dónal; 24.09.2008
comment
SetAttribute на функцията servletContext получава Object като стойностен параметър. Сигурни ли сте, че можем да прехвърлим com.example.Constants? - person nhthai; 05.07.2015
comment
къде е стартирането на приложението? - person Vasil Valchev; 22.03.2017

Оказва се, че има друга библиотека с етикети, която предоставя същата функционалност. Работи и за константи Enum.

person Dónal    schedule 24.09.2008

Изглежда като дубликат на достъп до константи в 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

person Roger Keays    schedule 16.07.2012

Каква функционалност искате да използвате? Този етикет би могъл да има достъп до всяко поле на публичен клас по име на клас и име на поле?

Свързването на скриптове се извършва по време на компилиране, но достъпът до полето на класа taglib трябва да използва такъв Java API като отражение по време на изпълнение. Наистина ли имате нужда от това?

person maxp    schedule 24.09.2008

Ще използвам jakarta-taglibs-unstandard-20060829.jar в моя проект, но ти си верен, изглежда вече не е достъпен за изтегляне.

Имам това в моя pom.xml, за да получа тази библиотека, но мисля, че ще работи само защото тази библиотека вече е в моето локално хранилище (не мога да го намеря в официалните хранилища):

    <dependency>
        <groupId>jakarta</groupId>
        <artifactId>jakarta-taglibs-unstandard</artifactId>
        <version>20060829</version>
    </dependency>

Не знам дали има друга алтернатива.

Надявам се, защото това беше добър начин за достъп до константи в JSP.

person paulgreg    schedule 24.09.2008

Защо искате да отпечатате стойността на константата в 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>

person Community    schedule 24.09.2008
comment
Ако можете да пренапишете това, без да използвате Scriptlet, ще сте отговорили на въпроса ми. - person Dónal; 24.09.2008