1. property: <s:property value="username"/>
2. property 取值为字符串: <s:property value="'username'"/>
3. property 设定默认值: <s:property value="admin" default="管理员"/>
4. property 设定HTML: <s:property value="'<hr/>'" escape="true"/> 输出 <hr/>
5. set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" />
set 从request取值: <s:property value="#request.adminName" />
set 从ActionContext取值: <s:property value="#adminName" />
set 设定范围: <s:set var="adminPassword" value="password" scope="session"/>
set 从相应范围取值: <s:property value="#session.adminPassword"/>
说明:set 在以前的版本中有name id,但是在2.1版本开始不推荐使用,用var代替.实际var表示把变量压入栈actioncontext. 官方这样说明var的:Name used to reference the value pushed into the Value Stack;
这样我们可以用#key来访问.
6. bean标签
<s:bean name="com.awf.tags.Dog" var="mydog">
<s:param name="name" value="'pp'"></s:param>
<s:property value="name"/>
</s:bean>
说明:注意到pp用单引号,因为这时要真正用到String,如果没有加单引号,struts2会默认用OGNL到ValueStack找值.
对于为什么可以<s:property value="name"/>(取到pp)这样取值,可以做个小实验在set标签里加入<s:debug/>,这样你可能看到整个栈数 据的出入,此时栈顶当然是mydog对象,这个标签执行完后就可以出栈了,这时action又保持在栈顶了.
此时mydog被存入到actioncontext栈中,所以要取值要用到#号了.
取值:<s:property value="#mydog.name/>
7. include标签
<s:include value="/index.html"></s:include>
这里value的默认处理方式是要内容当做String,不是OGNL,如果这时要用OGNL可以用%,这就是%的实际意义了,其实上面所讲的标签 也可以使用%,OGNL对于那些默认使用OGNL的标签会忽略%号,真搞不懂为什么全部都统一,这样我们就不用记这么多了^^,下面是具体使用方法:
<s:set var="incPage" value="%{'/index.html'}" />
<s:include value="%{#incPage}"></s:include>
现在回到include标签,这个标签真的不好用对中文的支持不好,可能有BUG,所以还是用jsp自带的动态包含/静态包含.
8. if elseif else标签
定义变量 num= <s:set var="num" value="'100'"/> set定义的变量存在ActionContext栈中
<s:if test="#num< 0"> 小于0 </s:if>
<s:elseif test="#num <50"> 小于50 </s:elseif>
<s:else>大于50</s:else>
<s:if test="#parameters.aaa == null">null</s:if>
这里说到#parameters不得不提一下,我们在地址栏输入的变量会存在ActionContext栈中,如xx/sdfds.jsp?name=1
这样我们可能用OGNL这样取值#parameters.name ,注意这里取出来的是一个集合,如果你这样访问xx/sdfds.jsp?name=1&name=2,你可以发现可以取出两个值.因为这样所以在写程序时我样最好精确定位像这样#parameters.name[0],就算你能保证只能一个值,也要这样.
9. iterator标签,遍历集合
<s:iterator value="{1, 2, 3}" >
<s:property/>
</s:iterator>
自定义变量:
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
<s:property value="#x.toUpperCase()"/> |
</s:iterator>
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator>
说明:偶数和其数不是下标,下标0其实是第一个当然是奇数了.
遍历map:
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>