一、通用标签
1、 property
property的value类型为Object
username作为OGNL表达式:<s:property value="username"/>
取值为字符串: <s:property value="'username'"/>
设定默认值: <s:property value="admin"default="管理员"/>
设定HTML,默认escape为true: <s:property value="'<hr/>'" escape="false"/>
2、 set
设定adminName值(默认放到request 和 ActionContext): <s:set var="adminName"value="username" />
从request取值: <s:property value="#request.adminName"/>
从ActionContext取值: <s:property value="#adminName"/>
设定var,范围为session,ActionContext中没有adminPassword: <s:set var="adminPassword"value="password" scope="session"/>
使用#无法取值: <s:property value="#adminPassword"/>
从相应范围取值: <s:property value="#session.adminPassword"/>
3、 bean
在<s:bean>中只有设置var的值,在ActionContext中与var的值相对应的项
<s:param>中的value=”xxx”时会将xxx解析为ognl表达式,如果要设定name的值为字符串应将value=”’xxx’”
<s:bean name="com.bjsxt.struts2.tags.Dog"var="myDog">
<s:param name="name"value="'oudy'"></s:param>
</s:bean>
拿出值:<s:property value="#myDog.name"/>
如果不设置var,那在bean标签内部,会在Value Stack中new 一个com.bjsxt.struts2.tags.Dog对象,可以再bean中使用<s:property>取值,在bean外不能去到相应值。
<s:bean name="com.bjsxt.struts2.tags.Dog" >
<s:param name="name"value="'pp'"></s:param>
<s:property value="name"/>
</s:bean>
4、 include(很少使用,主要说明%的使用方法)
包含静态英文文件
<s:include value="/_include1.html"></s:include>
包含静态中文文件
<s:include value="/_include2.html"></s:include>
包含静态英文文件,%用法--%将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用
<s:set var="incPage"value="%{'/_include1.html'}" />
<s:include value="%{#incPage}"></s:include>
5、fielderror
fielderror的theme存在问题,设置成simple后还是存在格式
<s:fielderrorfieldName="fielderror.test"theme="simple"></s:fielderror>
二、控制标签
1、if,elseif,else
age = <s:propertyvalue="#parameters.age[0]"/><br />
<s:setvar="age"value="#parameters.age[0]"/>
<s:iftest="#age < 0">wrong age!</s:if>
<s:elseiftest="#parameters.age[0]< 20">too young!</s:elseif>
<s:else>yeah!</s:else>
2、iterator
a)遍历集合:
<s:iteratorvalue="{1, 2,3}">
<s:property/> |
</s:iterator>
结果: 1 | 2 | 3 |
b)自定义变量:
<s:iteratorvalue="{'aaa','bbb', 'ccc'}"var="x">
<s:propertyvalue="#x.toUpperCase()"/> |
</s:iterator>
结果:AAA| BBB | CCC |
c)使用status:
<s:iteratorvalue="{'aaa','bbb', 'ccc'}"status="status">
<s:property/> |
遍历过的元素总数:<s:propertyvalue="#status.count"/> |
遍历过的元素索引:<s:propertyvalue="#status.index"/> |
当前是偶数?:<s:propertyvalue="#status.even"/> |
当前是奇数?:<s:propertyvalue="#status.odd"/> |
是第一个元素吗?:<s:propertyvalue="#status.first"/> |
是最后一个元素吗?:<s:propertyvalue="#status.last"/>
</s:iterator>
d)遍历MAP:
定义MAP必须要在开始加 #
<s:iteratorvalue="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:propertyvalue="#x.key"/> | <s:propertyvalue="#x.value"/>
</s:iterator>
或者 :<s:propertyvalue="key"/> | <s:propertyvalue="value"/>
3、subset 取特定长度的字符串
<s:subset source="myList"count="13" start="3">
<s:iterator>
<s:property />
</s:iterator>
</s:subset>
三、UI标签
Theme:simple xhtml(默认) css_xhtmlajax
定义自己的UI标签
1. css(覆盖struts2原来的css)
2. 覆盖单个文件
3. 定义自己的theme
4. 实战:
a) 把所有主题定义为simple
b) fielderror特殊处理
c) 自己控制其他标签的展现