在struts2的文件包中,有关于标签的具体使用方法,但是却需注意的是,官方文档某些地方描述是不准确,需要自己根据实际验证。
官方文档所在位置,struts-2.3.16.1/docs/WW/docs/home.html,进入网页后选择Guide,然后就可以看到Tag Developers Guide,在这里就可以查阅tag的使用了。
UI标签
用于生成HTML元素的标签
非UI标签
用于数据访问,逻辑控制等
Ajax标签
所有的标签都在struts-tags里面
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会帮助我们将对象放入相应的容器中(上述的范围)
<s:if test=""></s:if>
<s:else test=""></s:else>
<s:elseif test=""></s:elseif>
<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>
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
打印奇数元素<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>
<s:merge var="newList"><s:param value=""/>...</s:merge>
<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>
<!--注意:在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>
<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>
<!-- 创建比较器对象 -->
<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>
原文:http://blog.csdn.net/havedream_one/article/details/45692383