【问题标题】:Java constants in JSP [duplicate]JSP中的Java常量[重复]
【发布时间】: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 中的常量?

干杯, 唐

【问题讨论】:

    标签: java jsp constants jsp-tags


    【解决方案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 的情况下重写此代码,那么您将回答我的问题。
            猜你喜欢
            • 2010-09-12
            • 2015-11-17
            • 1970-01-01
            • 2012-10-03
            • 2012-09-19
            • 2013-05-17
            • 1970-01-01
            • 2015-09-19
            相关资源
            最近更新 更多