当前位置:  开发笔记 > 编程语言 > 正文

访问JSP中的常量(没有scriptlet)

如何解决《访问JSP中的常量(没有scriptlet)》经验,为你挑选了2个好方法。

我有一个类定义各种会话属性的名称,例如

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

我想在JSP中使用这些常量来测试这些属性的存在,例如:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="com.example.Constants" %>


    <%-- Do somthing --%>

但我似乎无法使sytax正确.另外,为了避免在多个地方重复上面相当冗长的测试,我想将结果分配给本地(页面范围)变量,并改为引用它.我相信我可以这样做,但我再次努力找到正确的语法.

更新:继续下面的建议,我试过:


这没用.所以相反,我尝试替换常量的字面值.我还将常量添加到页面的内容中,因此我可以在呈现页面时验证常量的值


<%= "Constant value: " + WebHelper.ATTR_CURRENT_PARTNER %>

这工作正常,它在页面上打印了期望值"current.user".我无法解释为什么使用String文字工作,但是当两个看起来具有相同的值时,对常量的引用不会.救命.....



1> Athena..:

它在您的示例中不起作用,因为ATTR_CURRENT_USERJSTL标记看不到常量,JSTL标记期望getter函数公开属性.我没有尝试过,但揭示常量的最简洁方法似乎是不标准的标记库.

ETA:我给的旧链接没有用.在这个答案中可以找到新的链接:JSP中的Java常量

代码片段以阐明您所看到的行为:示例类:

package com.example;

public class Constants
{
    // attribute, visible to the scriptlet
    public static final String ATTR_CURRENT_USER = "current.user";

    // getter function;
    // name modified to make it clear, later on, 
    // that I am calling this function
    // and not accessing the constant
    public String getATTR_CURRENT_USER_FUNC()
    {
        return ATTR_CURRENT_USER;
    }


}    

JSP页面的片段,显示示例用法:

<%-- Set up the current user --%>
<%
    session.setAttribute("current.user", "Me");
%>

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

Using scriptlets

Constants.ATTR_CURRENT_USER

<%=Constants.ATTR_CURRENT_USER%>

Session[Constants.ATTR_CURRENT_USER]

<%=session.getAttribute(Constants.ATTR_CURRENT_USER)%> <%-- JSTL --%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Using JSTL

Constants.getATTR_CURRENT_USER_FUNC()

Session[Constants.getATTR_CURRENT_USER_FUNC()]

Constants.ATTR_CURRENT_USER

<%-- Commented out, because otherwise will error: The class 'com.example.Constants' does not have the property 'ATTR_CURRENT_USER'.

cons.ATTR_CURRENT_USER

--%>

这输出:

使用scriptlet

Constants.ATTR_CURRENT_USER

当前用户

会议[Constants.ATTR_CURRENT_USER]


使用JSTL

Constants.getATTR_CURRENT_USER_FUNC()

当前用户

会话[Constants.getATTR_CURRENT_USER_FUNC()]

Constants.ATTR_CURRENT_USER




真棒的答案!我似乎找不到下载非标准taglib的方法,你知道它是否还可用吗?

2> daniel.deng..:

您可以使用c:set将Constants.ATTR_CURRENT_USER定义为变量,如下所示:


     
    <%-- Do somthing --%> 
 

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有