struts2学习笔记之十二(控制标签)

来源:互联网 发布:重庆大学的校园网域名 编辑:程序博客网 时间:2024/06/03 19:29

  在struts2的文件包中,有关于标签的具体使用方法,但是却需注意的是,官方文档某些地方描述是不准确,需要自己根据实际验证。
  官方文档所在位置,struts-2.3.16.1/docs/WW/docs/home.html,进入网页后选择Guide,然后就可以看到Tag Developers Guide,在这里就可以查阅tag的使用了。

java领域MVC框架

  • 主要实现控制器(StrutsPrepareAndExecuteFilter + Action )
  • 提供大量的标签库,可以简化view的开发

Struts2标签分类

  • UI标签

    用于生成HTML元素的标签

  • 非UI标签

    用于数据访问,逻辑控制等

  • Ajax标签

    所有的标签都在struts-tags里面

OGNL

Object Graph Navigation Language,对象图表达式语言
  • EL

    1、表达式语言,做数据访问语言,并不是编程语言,所以很简单
    2、提供了11个内置对象。    pageContext,pageScope,requestScope,sessionScope,applicationScope,param,paramValues,header,headerValues,cookie,initParam(获取Web应用的配置参数)

  • OGNL

    1、既然要访问数据,必须有个东西装数据,OGNL的装数据的东西(一个容器)“Stack Context(ONGL Context)”

    2、上述Stack Context中的每一个对象,都应该有一个名字。
    访问:#对象名
    例:OGNL Context中有3个对象,foo,bar,test
    #bar.abc —-访问bar对象的getAbc()方法的返回值
    #test.xyz.abc —-访问test对象的getXyz().getAbc()

    3、OGNL Context
    有一个根对象(root),访问root对象的属性时可以省略对象名
    例:OGNL Context中有3个对象,foo(root对象),bar,test
    abc.xyz.def —-访问foo.getAbc().getXyz().getDef()
    4、OGNL Context 中的内容application,session,value stack(root),request,parameters(搜索请求参数),attr(searches page,request,session,then application scope)
    例:

    <s:property value="#session.mySessionPropKey" />
    <s:property value="#session['mySessionPropKey']" />
    <s:property value="#request.myRequestPropKey">

    5、OGNL可以直接创建List对象
    例:
    {ele1,ele2,….}
    6、OGNL可以直接创建Map对象
    例:
    #{key1:value1,key2:value2,….}
    7、OGNL可以直接获取子集合
    例:
    person.cats.{? #this.age > 2}
    —–获取person所养的猫中age大于2的所有猫的集合
    person.cats.{^ #this.age > 2}
    —–获取person所养的猫中age大于2的第一个猫
    person.cats.{$ #this.age > 2}
    —–获取person所养的猫中age大于2的最后一个猫
    8、OGNL支持访问直接调用静态方法
    注意:使用这个功能需要开启常量,struts.ognl.allowStaticMethodAccess设置为true(默认为false)
    使用方式:

    • 类名@静态Field
    • 类名@静态方法(参数值)

    注意:struts2会帮助我们将对象放入相应的容器中(上述的范围)

控制标签(Control Tag)

  • if
    <s:if test=""></s:if>
  • else
    <s:else test=""></s:else>
  • elseif
    <s:elseif test=""></s:elseif>
  • append
    合并两个或两个以上的集合(与merge功能类似)
  • generator
    按照某种规则,把一个字符串分解成一个集合
  • iterator
    迭代元素
  • merge
    合并集合
  • sort
    必须指定一个比较器
  • subset
    截取一个子集合

if\elseif\else

  • 属性:test
      注意:else没有属性
  • 实例
    <s:if test="#age>60"><h3>老年人</h3></s:if>    <s:elseif test="#age>30"><h3>中年人</h3></s:elseif>    <s:elseif test="#age>18"><h3>青年人</h3></s:elseif>    <s:elseif test="#age>8"><h3>少年人</h3></s:elseif>    <s:else>儿童</s:else>

iterator

  • 属性:var,value,status,begin,end
  • 实例

1、迭代所有元素

<h2>Iterator标签 测试</h2>    <ul>        <s:iterator var="it" value='{"zhang","wang","tian","li"}'>            <li>                ${it}                <s:property value="#it"/>            </li>        </s:iterator>    </ul>    <!-- 经过debug发现iterator变量it放在了Stack Context中 -->    <s:debug/>

2、迭代指定部分

 获取第四,第五,第六个元素<br/>    <ul>        <s:iterator var="it" value='{"zhang","wang","tian","li","zhao","qian","sun","zhou"}' begin="3" end="5">            <li>                ${it}                <s:property value="#it"/>            </li>        </s:iterator>    </ul>

3、使用status

  • getCount()
  • getIndex()
  • isFirst()
  • isLast()
  • isOdd() —-奇数行
  • isEven()
 打印奇数元素<br/>    <ul>        <s:iterator var="it" value='{"zhang","wang","tian","li","zhao","qian","sun","zhou"}' status="st">            <s:if test="#st.odd">                <li>                    <s:property value="#it"/>                </li>            </s:if>        </s:iterator>    </ul>

4、迭代Map

<table width="300" border="1">        <s:iterator value="#{'java':99,'C++':90,'C':65,'Python':87,'Ruby':89}" var="entry">            <tr>                <td>                    ${entry.key}                </td>                <td>                    ${entry.value}                </td>            </tr>        </s:iterator>    </table>

merge和append

  • merge
    属性:var
    <s:merge var="newList"><s:param value=""/>...</s:merge>
  • append
    属性:var
    <s:append var="newList"><s:param value=""/>...</s:append>
  • 实例
    <!-- 定义两个集合list1和list2 -->    <s:set var="list1" value='{"zhao","qian","sun","li"}'/>    <s:set var="list2" value='{"zhou","wu","zheng","wang"}'/>    list1:<s:property value="#list1"/><br/>    list2:<s:property value="#list2"/><br/>              使用append合并list1和list2之后<br/>    <s:append var="append">        <s:param value="#list1"/>        <s:param value="#list2"/>    </s:append>    <s:iterator var="it" value="#append">        ${it},    </s:iterator>    <br/>    <h3>append只是单纯的将list2接到list1之后重新组成一个集合</h3>    使用append合并list1和list2之后<br/>    <s:merge var="merge">        <s:param value="#list1"/>        <s:param value="#list2"/>    </s:merge>    <s:iterator var="it" value="#merge">        ${it},    </s:iterator>    <br/>    <h3>merge从list1和list2依次取一个元素添加到新集合了,这样也就打乱了原有的顺序</h3>

generator

  • 属性:var,val,separator
    注意:是val,不是value。
    应用:读取到一个字符串之后,可以使用这个代替split方法达到分割的目的
  • 实例
    <!--注意:在val的取值中,外层是双引号,内层是一个单引号,如果缺少,输出有问题-->    <s:generator var="newList" val="'abc:xys:sdfs:df'" separator=":"/>    <ul>        <s:iterator var="it" value="#newList">            <li>                <s:property value="#it"/>            </li>        </s:iterator>    </ul>

subset

  • 属性:var,source,start,count
    注意:var被放到了page Context中,因此用Iterator访问时要使用#attr.varname
  • 实例
<s:subset var="newList" source='{"as","dasg","ew","ew"}' start="2" count="2"/>    <ul>        <!--使用#attr.newList访问-->        <s:iterator var="it" value="#attr.newList">            <li>                <s:property value="#it"/>            </li>        </s:iterator>    </ul>

sort

  • 属性:var,source,comparator
    注意:必须指定比较器comparator,所以需要和bean标签一起使用,var的存储位置是page Context,因此必须使用#attr.varName访问
  • 实例
<!-- 创建比较器对象 -->    <s:bean var="comparator" name="org.struts2.util.MyComparator"/>    <!-- 定义一个列表 -->    <s:set var="list" value="{'java','c++','ruby','python','vb','c#'}" />        排序之前:<s:property value="#list"/>    <s:sort var="nl" source="#list" comparator="#comparator"/>        <br/>        排序之后:<s:property value="#attr.nl"/>        <s:iterator var="it" value="#attr.nl">              <s:property value="#it"/>        </s:iterator>
0 0
原创粉丝点击