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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在jsp页面直接获取常量类中的常量相关的知识,希望对你有一定的参考价值。

我有一个常量类,如下:
public class Constants
public static final String PRODUCTCODE_PACKAGE="PG";

在前台jsp页面如何通过$Constants.PRODUCTCODE_PACKAGE或者$Constants_PRODUCTCODE_PACKAGE方法直接获得PRODUCTCODE_PACKAGE的值?

方法一:直接通过”$(param.name)“ 进行参数值调用。
方法二:可以通过“ request.getParameter (name)”进行参数值调用。
解释:name值的话,已经在struts中进行了映射,可以通过方法一“el表达式”进行直接调用,或者是在jsp中通过get方法进行参数值获取。
备注:以上方法中,必须把静态的值添加到传递代码中,如: request.setParameter ("name","zhangsan"),否则是没法获取的。
参考技术A 在后台跳转该页面时候用request.setAttribute("PRODUCTCODE_PACKAGE",Constants.PRODUCTCODE_PACKAGE); 参考技术B   “$Constants.PRODUCTCODE_PACKAGE”这种格式称为EL表达式,它和JSP都是JVAA WEB应用中的工具,既然说到WEB应用,就要讲究作用域。
  JSP和EL表达式均只能在此四种范围内使用:page、request、session 和 application。
page 指单一页jsp page的范围;
request的范围只在jsp页发出请求到另一页之间,随后这个属性失效;
session范围是用户和服务器连接的那段时间,用户与服务器断开属性就失效;
application作用范围最大,在服务器一开始执行服务到服务器关闭为止。慎用,可能造成服务器负载过重。
  说到这里,看你这个常量类里的这个常量,显然不在这4个作用域内,所以你要想用EL表达式获取,就必须先放把这个常量放到这4个作用域内。
  通常的做法:既然是常量,就在页面直接import此类,然后直接引用即可;
  笨一点的办法:就是放到request里,如楼上所说;
  再就是如果多处多次引用,也可以放到session里,相关做法和request类似;

  希望你能理解本回答被提问者和网友采纳

jsp-EL表达式

JSP标签技术

在JSP页面中写入大量的java代码会导致JSP页面中html代码和java代码混杂在一起,会造成jsp页面结构的混乱,导致后期难于维护,并且代码难以复用。

于是在JSP的2.0版本中,sun提出了JSP标签技术,推荐使用标签来代替JSP页面中java代码,并且推荐,JSP2.0以后不要在JSP页面中出现任何一行java代码。

EL表达式

格式:${ 常量/表达式/变量 } (放在EL中的变量得先存入域中,才可以获取变量的值)

作用:

  1. 计算放在其中的表达式的结果,将结果输出在当前位置。

  2. 主要作用:用于从域对象中获取数据,将获取到的数据输出在当前位置。

域中的对象:

pageContextrequestsessionapplication

EL的使用

常量、表达式、变量

获取常量

Hello EL输出到浏览器

${"Hello EL"}

获取表达式结果

如果3>5成立, 输出yes, 否则输出no

${ 3 > 5 ? "yes" : "no" }

可以在或括号里进行运算, 例如;${3 + 5}

获取变量

(变量得先存入中)

在EL中书写变量, 底层会根据变量的名字, 到四个作用域中寻找同名的属性,如果可以找到, 就会输出这个属性对应value值, 如果找不到, 就什么也不输出(也不会报错)
在寻找时, 会按照如下作用域的顺序去找对应的属性, 先->后

pageContextrequestsessionapplication

如果找到就直接返回(即使后面还有也不会再寻找), 如果找不到, 就什么也不输出

jsp对象 EL作用域对象
pageContext pageScope
request requestScope
session sessionScope
application applicationScope

例如:

<%
    request.setAttribute("name", "jack");
    session.setAttribute("name", "tom");
%>
 <!--按循序查找, request的优先级比session高, 所以输出jack-->
${ name } <br>
<!--指定作用域的name, 输出session中的name-->
${ sessionScope.name }

结果;(浏览器输出页面)

jack
tom

获取作用域中数组或集合中的元素

获取数组或集合元素

例如:

<%
    String[] names = {
        "孙尚香", "黄忠", "马可波罗", "成吉思汗"
    };
    request.setAttribute("names", names);
    List list = new ArrayList();
    list.add("安其拉");
    list.add("小乔");
    list.add("王昭君");
    request.setAttribute("list", list);
%>
${names[0]} <br> <!--显示names数组中下标为0的元素-->
${names[1]} <br> <!--显示names数组中下标为1的元素-->
${list[2]} <br><!--显示list集合中下标为2的元素-->
${list[3]} <!--list集合中没有下标为3的元素, 什么都不输出-->

结果: (浏览器页面)

孙尚香
黄忠
王昭君

获取作用域中map集合中的元素

获取map元素

例如:

<%
    Map map = new HashMap();
    map.put("name", "尼古拉斯.赵四");
    map.put("age", 32);
    map.put("addr", "中国");
    request.setAttribute("map1", map);
%>
${map1.name} <br> <!--获取key为name的value-->
${map1.age} <br> <!--获取key为age的value-->
${map1.addr} <!--获取key为addr的value-->

结果: (浏览器页面)

尼古拉斯.赵四
32
中国

获取作用域中JavaBean对象的属性值

获取对象中的属性

例如:

<%
    // 声明一个User对象,并将User对象存入域中
    User u1 = new User();
    u1.setName("刘德华");
    u1.setAge(18);
    u1.setAddr("中国香港");
    request.setAttribute("user", u1);
%>
${user.getName()} <br> <!--完整写法, 获取name属性}-->
${user.age} <!--简写法, 获取age-->

结果:(浏览器页面)

刘德华
18

以上是关于如何在jsp页面直接获取常量类中的常量的主要内容,如果未能解决你的问题,请参考以下文章

jsp-EL表达式

如何覆盖模块中的类常量和方法?

thinkPHP 如何在类中定义常量

如何不通过apaceh执行php页面 以及常量

PHP的静态及类中声明的常量

js中如何定义 常量?