JSP中的Java常量[重复]
Posted
技术标签:
【中文标题】JSP中的Java常量[重复]【英文标题】:Java constants in JSP [duplicate] 【发布时间】:2010-09-12 17:49:41 【问题描述】:我有一个定义各种常量名称的类,例如
class Constants
public static final String ATTR_CURRENT_USER = "current.user";
我想在 JSP 中使用这些常量不使用使用 Scriptlet 代码,例如:
<%@ page import="com.example.Constants" %>
<%= Constants.ATTR_CURRENT_USER %>
Apache unstandard taglib 中似乎有一个提供此功能的标签。但是,我找不到任何下载此标记库的方法。我开始怀疑它是否已被弃用并且功能已移至另一个(Apache)标签库?
有谁知道我在哪里可以获得这个库,或者如果它不可用,是否有其他方法可以在不使用 scriptlet 代码的情况下访问 JSP 中的常量?
干杯, 唐
【问题讨论】:
【参考方案1】:在应用启动时,可以在servletContext中添加Constants类,然后在任意jsp页面中访问
servletContext.setAttribute("Constants", com.example.Constants);
然后在jsp页面中访问
<c:out value="$Constants.ATTR_CURRENT_USER"/>
(您可能必须为每个常量创建 getter)
【讨论】:
我真的很想避免为每个常量创建 getter servletContext 函数的 setAttribute 接收 Object 作为值参数。你确定我们可以转移 com.example.Constants 吗? “应用程序启动”在哪里?【参考方案2】:原来another tag library 提供了相同的功能。它也适用于枚举常量。
【讨论】:
【参考方案3】:看起来像 accessing constants in JSP (without scriptlet) 的副本
我的回答是:
在 EL 中无法访问静态属性。我使用的解决方法是创建一个将自身分配给静态值的非静态变量。
public final static String MANAGER_ROLE = 'manager';
public String manager_role = MANAGER_ROLE;
我使用 lombok 来生成 getter 和 setter,这样就很好了。你的 EL 看起来像这样:
$bean.manager_role
完整代码https://rogerkeays.com/access-java-static-methods-and-constants-from-el
【讨论】:
【参考方案4】:您想使用什么样的功能? 该标签应该能够通过类名和字段名访问任何公共类字段吗?
Scriptlet 链接在编译时完成,但 taglib 类字段访问必须使用 Java API 作为运行时的反射。你真的需要那个吗?
【讨论】:
【参考方案5】:我将在我的项目中使用 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 中访问常量的好方法。
【讨论】:
【参考方案6】:为什么要在JSP 上打印常量的值?您确定要定义它们,以便在 JSP 中您可以从会话中提取对象并在呈现它们之前请求它们?
<% 用户 user = (User) session.getAttribute(Constants.ATTR_CURRENT_USER); %>欢迎
【讨论】:
如果您可以在不使用 Scriptlet 的情况下重写此代码,那么您将回答我的问题。以上是关于JSP中的Java常量[重复]的主要内容,如果未能解决你的问题,请参考以下文章