2008-09-24 3 views
16

Ich habe eine Klasse, die die Namen verschiedener Konstanten definiert, z.Java-Konstanten in JSP

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

Ich mag würde diese Konstanten innerhalb eines JSP ohne mit Scriptlet Code verwenden, wie zum Beispiel:

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

Es gibt einen Tag in den Apache unstandard taglib, die diese Funktionalität bereitstellt zu sein scheint. Ich kann jedoch keine Möglichkeit finden, diese Taglib herunterzuladen. Ich beginne mich zu fragen, ob es veraltet ist und die Funktionalität in eine andere (Apache) -Tag-Bibliothek verschoben wurde?

Weiß jemand, wo ich diese Bibliothek bekommen, oder wenn es nicht verfügbar ist, wenn es eine andere Möglichkeit, das ich Konstanten in einer JSP ohne scriptlet Code zugreifen kann?

Cheers, Don

Antwort

-3

Warum wollen Sie den Wert der Konstante auf der JSP drucken? Sicherlich definieren Sie sie so, dass Sie in der JSP Objekte aus der Sitzung extrahieren und anfordern können, bevor Sie sie präsentieren?

 

<%@ 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

Wenn Sie dies ohne Verwendung von Scriptlet umschreiben könnte, werden Sie meine Frage beantwortet haben. –

2

Auf Start der Anwendung können Sie die Konstanten Klasse ServletContext hinzufügen und dann Seite in jeder jsp

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

zugreifen und sie dann Seite in einer jsp

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

zugreifen (Sie haben könnten Getter für jede konstante erstellen)

+13

Ich möchte wirklich vermeiden, Getter für jede Konstante –

+2

zu erstellen. Das setAttribute der servletContext-Funktion empfängt Object als Wertparameter. Sind Sie sicher, dass wir com.example.Constants übertragen können? – nhthai

+0

wo ist "Anwendungsstart"? –

0

Welche Art von Funktionalität möchten Sie benutzen? Dieses Tag könnte auf jedes öffentliche Klassenfeld nach Klassennamen und Feldnamen zugreifen können?

Scriptlets Verlinkung bei der Kompilierung gemacht, aber taglib Klassenfeld Zugriff hat zur Laufzeit solchen Java API als Reflexion zu verwenden. Brauchst du das wirklich?

1

Es stellte sich heraus another tag library es gibt, die die gleiche Funktionalität zur Verfügung stellt. Es funktioniert auch für Enum-Konstanten.

0

Ich werde jakarta-taglibs-unstandard-20060829.jar in meinem Projekt verwenden, aber Sie sind wahr, es scheint not available for download anymore.

Ich habe diese Bibliothek zu bekommen in meinem pom.xml um bekam, aber ich denke, es funktioniert nur, weil die Bibliothek jetzt auf meinem lokalen Repository ist (ich kann es nicht in den offiziellen Repositories):

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

Ich weiß nicht, ob es eine andere Alternative gibt.

Ich hoffe so, weil es ein guter Weg war Konstanten in JSP zuzugreifen.

1

Sieht aus wie ein Duplikat accessing constants in JSP (without scriptlet)

Meine Antwort war:

Statische Eigenschaften in EL nicht zugänglich sind. Die Problemumgehung, die ich verwende, besteht darin, eine nicht statische Variable zu erstellen, die sich dem statischen Wert zuordnet.

Ich benutze Lombok, um den Getter und Setter zu erzeugen, so dass es ziemlich gut ist. Ihre EL sieht wie folgt aus:

${bean.manager_role} 

Voll Code bei http://www.ninthavenue.com.au/java-static-constants-in-jsp-and-jsf-el