• JSTL中的scope属性


         前两天接到老大一个任务:要验证一下<c:import>能否动态地引入不同的文件。当时很兴奋,要知道在对日外包里面,这个也得算技术活了。呵呵!

        说干就干,写了两个jsp文件:m.jsp  test1.jsp。目的是用变量"a"代替test1中的“1”。代码如下:

    m.jsp

    ----------------------------------

    <@import prefix="c" uri="http://java.sun.com/jstl.core">

                 <c:set  var="a" value="1"/>

                   <c:import url="test${a}.jsp"/>

    ----------------------------------

    test1.jsp

    ---------------------------------

    <@import prefix="c" uri="http://java.sun.com/jstl.core">

        <BR>TEST1<BR><c:out value="${a}"/>

    ---------------------------------

    试验之前老大说估计不行,而结果却是

    TEST

    1

    那是不是可以说JSTL(Jsp Standard Taglib Language)是可以解析EL(Express Language)的呢?。我再看了看tomcat里面work目录下编译java文件(m_jsp.java文件),其实是没编译EL的,即还是把他作为字符串参数传递,而在执行的时候动态的解析。

        说到现在还没说到<c:import> 的scope属性,别急哈。先谈谈引入这个问题的原因:试验结果出乎老大的意料,他在那JJYY了一阵,我在一旁偷着乐:哈哈,没搞对吧!没想到他马上又说:如果给"a"设不同的值,能引入不同的文件吗? “恩.........,我也不知道”我应到。于是他在我机子上写了下面的代码:

    m.jsp

    ----------------------------------

    <@import prefix="c" uri="http://java.sun.com/jstl.core">

                 <c:set  var="a" value="1"/>

                   <c:import url="test${a}.jsp"/>

                 <c:set  var="a" value="2" scope="request"/>

                   <c:import url="test${a}.jsp"/>

    ----------------------------------

    test1.jsp

    ---------------------------------

    <@import prefix="c" uri="http://java.sun.com/jstl.core">

        <BR>TEST1<BR><c:out value="${a}"/>

    ---------------------------------

    test2.jsp

    ---------------------------------

    <@import prefix="c" uri="http://java.sun.com/jstl.core">

        <BR>TEST2<BR><c:out value="${a}"/>

    ---------------------------------

    结果如下:

    TEST1

    1

    TEST1

    1

    老大火了,为什么不行呢?这次test2.jsp怎么没引入进来??“不搞了,看来不行”老大拂袖而去,丢了这么一句。
    “我来搞搞”我心理想着,看着他写的代码,伊?怎么m.jsp中第二次设值要加一个“scope”属性呢?我试着把第次设a的值也加上“scope="request"”,跑了跑。结果:

    TEST1

    1

    TEST2

    2

    我很激动,马上报告老大。老大过来看了看,他也觉得奇怪啊,然后他把两行代码的scope都去掉,结果和都加上scope是一样的。我和老大现在都想不通了,于是老大去找了他的老大(呵呵,某部的部长)!

     果然是老大的老大啊,看了不到一分钟。马上就解释了原因:默认下scope属性值是"page",  <c:set  var="a" value="1"/>  <c:set  var="a" value="2" scope="request"/>是申明了两个的不同作用域的变量,我们可以称为page.a ,request.a。<c:import url="test${a}.jsp"/>引入时,肯定是先在当前页面找a的值了,找不到的话再去找request作用域的a,如果找到了,当然就不用去更大的作用域找了。

     听到这,老大汗.....;我更汗.........。看来自己现只能是个小兵水平哈。

    总结:

      1.scope的作用域大小依次为:application>session>request>page(默认)

      2.jsp处理变量的作用域先后依次为:page(默认)->request->session->application

    原文链接:http://blog.csdn.net/zt_soft/article/details/1335238

  • 相关阅读:
    redis安装及简单命令
    struts2 第二天
    初学struts2-入门案列
    hibernate第二天
    hibernate入门
    同义词,索引,表分区
    表空间,序列
    orcale函数
    orcale错题分析
    orcale开篇
  • 原文地址:https://www.cnblogs.com/jifeng/p/5859834.html
Copyright © 2020-2023  润新知