20

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

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

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

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

Apache非标准标记库中似乎有一个提供此功能的标记。但是,我找不到任何下载此标记库的方法。我开始怀疑它是否已被弃用并且功能已移至另一个(Apache)标签库?

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

干杯,唐

4

6 回答 6

4

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

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

然后在jsp页面中访问

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

(您可能必须为每个常量创建吸气剂)

于 2008-09-24T14:17:36.437 回答
1

原来还有另一个提供相同功能的标签库。它也适用于枚举常量。

于 2008-09-24T16:25:19.733 回答
1

看起来像是在 JSP中访问常量的副本(没有 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

于 2012-07-16T20:56:21.743 回答
0

你想使用什么样的功能?该标签应该能够通过类名和字段名访问任何公共类字段吗?

Scriptlet 链接在编译时完成,但 taglib 类字段访问必须在运行时使用 Java API 作为反射。你真的需要那个吗?

于 2008-09-24T15:25:50.827 回答
0

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

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

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

我不知道是否还有其他选择。

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

于 2008-09-24T16:33:22.147 回答
-3

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

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

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

于 2008-09-24T14:11:24.860 回答