JSP中的Java常量

我有一个类定义各种常量的名称,例如

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

我想在JSP中使用这些常量而不使用Scriptlet代码,例如:

   

Apache unstandard taglib中似乎有一个标记提供此function。 但是,我找不到任何方法来下载这个taglib。 我开始怀疑它是否已被弃用且function是否已移至另一个(Apache)标记库?

有谁知道我可以在哪里获得这个库,或者如果它不可用,如果有其他方法我可以在不使用scriptlet代码的情况下访问JSP中的常量?

干杯,唐

在应用程序启动时,您可以将Constants类添加到servletContext,然后在任何jsp页面中访问它

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

然后在jsp页面中访问它

  

(您可能必须为每个常量创建getter)

原来还有另一个提供相同function的标签库 。 它也适用于Enum常量。

看起来像是在JSP中访问常量的重复(没有scriptlet)

我的回答是:

EL中无法访问静态属性。 我使用的解决方法是创建一个非静态变量,将自己分配给静态值。

 public final static String MANAGER_ROLE = 'manager'; public String manager_role = MANAGER_ROLE; 

我使用lombok来生成getter和setter,这样就可以了。 你的EL看起来像这样:

 ${bean.manager_role} 

完整代码, url为http://www.ninthavenue.com.au/java-static-constants-in-jsp-and-jsf-el

您想使用哪种function? 该标签可以通过类名和字段名访问任何公共类字段吗?

在编译时链接完成的Scriptlet但是taglib类字段访问必须在运行时使用这样的Java API作为reflection。 你真的需要吗?

我将在我的项目中使用jakarta-taglibs-unstandard-20060829.jar但是,你是真的,它似乎不再可供下载了 。

我已经在我的pom.xml中有了这个以获得该库但我认为它只会因为该库现在在我的本地存储库(我在官方存储库中找不到它)而起作用:

   jakarta jakarta-taglibs-unstandard 20060829  

我不知道是否还有另一种选择。

我希望如此,因为它是访问JSP中常量的好方法。

为什么要在JSP上打印常量的值? 当然,您正在定义它们,以便在JSP中您可以在呈现它们之前从会话中提取对象并请求它们?


 <%@ page import =“com.example.Constants”%>
 <%@ page import =“com.example.model.User”%>
 <%
用户user =(User)session.getAttribute(Constants.ATTR_CURRENT_USER);
 %>

 

欢迎<%= user.getFirstName()%>