2008-09-24 4 views
16

У меня есть класс, который определяет имена различных констант, например.Java-константы в JSP

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

Я хотел бы использовать эти константы в JSP без используя скриптлете код, такой как:

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

Там, как представляется, тег в Apache unstandard TagLib, который обеспечивает эту функциональность. Однако я не могу найти способ загрузить этот taglib. Я начинаю задаваться вопросом, было ли это устаревшим, и функциональность была перенесена в другую библиотеку тегов (Apache)?

Кто-нибудь знает, где я могу получить эту библиотеку, или если она недоступна, если есть какой-либо другой способ доступа к константам в JSP без использования кода сценария?

Cheers, Дон

ответ

-3

Почему вы хотите, чтобы напечатать значение константы на 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> 

+1

Если бы вы могли переписать без использования скриптлета, вы ответили на мой вопрос. – 2008-09-24 14:29:41

2

При запуске приложения, вы можете добавить Константы класса к ServletContext, а затем получить доступ к нему в любой странице JSP

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

, а затем получить доступ к нему в JSP странице

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

(возможно, вам придется создавать геттеры для каждой константы)

+13

Я действительно хочу избежать создания геттеров для каждой константы – 2008-09-24 14:30:17

+2

Функция setAttribute of servletContext получает объект как параметр значения. Вы уверены, что можем перенести com.example.Constants? – nhthai 2015-07-05 11:31:08

0

Какую функциональность вы хотите использовать? Этот тег может иметь доступ к любому публичному классу по имени класса и имени поля?

Связывание сценариев, выполненное во время компиляции, но доступ к полю класса taglib должен использовать такой API Java как отражение во время выполнения. Вам это действительно нужно?

1

Оказывается, есть another tag library, который обеспечивает ту же функциональность. Он также работает для констант Enum.

0

Я буду использовать jakarta-taglibs-unstandard-20060829.jar в своем проекте, но, вы правда, кажется not available for download anymore.

Я получил, что в моем pom.xml для того, чтобы получить эту библиотеку, но я думаю, что это будет работать только потому, что библиотека теперь на моем локальном хранилище (я не могу найти его в официальных репозиториях):

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

Я не знаю, есть ли другая альтернатива.

Надеюсь, что это был хороший способ получить доступ к константам в JSP.

1

Похоже дубликата accessing constants in JSP (without scriptlet)

Мой ответ был:

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

Смежные вопросы