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 中您可以从会话中提取对象并在呈现它们之前请求它们?

&lt% 用户 user = (User) session.getAttribute(Constants.ATTR_CURRENT_USER); %>

欢迎

【讨论】:

如果您可以在不使用 Scriptlet 的情况下重写此代码,那么您将回答我的问题。

以上是关于JSP中的Java常量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在jsp页面直接获取常量类中的常量

java中的常量和变量

Jsp2

Java中常量小知识

Java常量池详细说明

如何在类似于Java的kotlin中声明常量[重复]