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>
- struts2学习笔记之十二(控制标签)
- J2EE系列之Struts2学习笔记(十六)--Struts2标签(数据标签、控制标签)
- Struts2学习(十二)【标签】
- Struts2学习笔记(八)——Struts2 控制标签
- Struts2标签库笔记之控制标签
- struts2学习笔记(十二)——组件和自定义标签
- J2EE系列之Struts2学习笔记(十七)--Struts2标签(界面标签、其他标签)
- Struts2之控制标签
- Struts2_学习笔记(十二)----Struts2总结
- Struts2学习笔记(十二)文件上传
- J2EE系列之Struts2学习笔记(二十二)--Struts2多文件上传和文件下载
- Struts2学习笔记(7)-----Struts2的控制标签iterator,if...else的用法
- struts2学习笔记之十三(数据标签)
- struts2学习笔记之十六(token标签)
- oracle9i学习笔记之十二 控制用户访问
- J2EE系列之Struts2学习笔记(十二)--自定义拦截器
- struts2标签学习笔记
- struts2标签学习笔记
- 【第六章】 AOP 之 6.9 代理机制 ——跟我学spring3
- Enocean RPS报文发送例程
- Mac OS X 中 Bochs的安装及使用
- Bitmap文件格式以及Opengl描画
- java操作mongodb基础(查询 排序 输出list)
- struts2学习笔记之十二(控制标签)
- 工作分配问题
- java内存泄漏问题
- shell 脚本之切换用户
- 深搜---Sum it up
- matlab把rgb转为颜色名
- PRID64干啥的
- javascript中的each遍历
- 看门狗