Struts2标签库总结


<%@ taglib uri="/struts-tags" prefix="s"%>

1.
<s:if></s:if>标签对,<s:elseif></s:elseif>标签对,<s:else></s:else>标签对
<s:if test="#user.age < 0">没这年龄</s:if>
<s:elseif test="#user.age < 20">太小</s:elseif>
<s:else>行</s:else>

2.
<s:iterator/></s:iterator>这个标签,可以遍历list,set,map,数组等。
在使用<s:iterator/>标签的时候有三个属性值得我们关注:
1). value属性:可选的属性,value属性是指一个被迭代的集合,使用ognl表达式指定,如果为空的话默认就是ValueStack栈顶的集合.
2).id属性:可选属性, 是指集合元素的id
3).status属性:可选属性,该属性在迭代时会产生一个IteratorStatus对象,该对象可以判断当前元素的位置,包含了以下属性方法:
int getCount(); 迭代元素个数
int getIndex(); 迭代元素当前索引
boolean getFirst(); 是否为第一个
boolean getEven(); 是否为偶
boolean getLast(); 是否最后一个
bolean getOdd(); 是否为奇

遍历 List,数组 篇
<s:iterator value="{'a', 'b', 'c'}">
<s:property />
</s:iterator>
value:放置一个集合,直接把<s:property />嵌进去,它就会遍历出来了。

<s:iterator value="{'a', 'b', 'c'}" var="x">
<s:property value="#x.toUpperCase()" />
</s:iterator>
var:把遍历出来的对象,存放进 var 声明的 key 里,它会被放进 Stack Context,所谓遍历,一般都用这方法。

<s:iterator value="{'a', 'b', 'c'}" status="status">
<s:property value="#status.count" /> <!-- 显示遍历过对象的总数 -->
<s:property value="#status.index" /><!-- 遍历当前对象的索引下标 -->
<s:property value="#status.even" /> <!-- 当前遍历的对象是否为偶数个?注意,不是以 index 为基准,而是以 count 为基准 -->
<s:property value="#status.odd" /><!-- 当前遍历的对象是否为奇数个? -->
<s:property value="#status.first" /><!-- 当前遍历的对象是否为第一个元素?-->
<s:property value="#status.last" /> <!-- 当前遍历的对象是否为最后一个元素? -->
</s:iterator>

遍历 Map 篇
<s:iterator value="#{1:'a', 2:'b', 3:'c'}">
<s:property value="key" /><s:property value="value" /><br />
</s:iterator>
value:这儿是一个 Map,所以用<s:property>可以提出 key 和 value信息。
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="user">
<s:property value="#user.key" /><s:property value="#user.value" /><br />
</s:iterator>
3.
<s:subset></s:subset>标签对,这个标签主要是从大集合里获取小集合。
<s:subset source="users" count="5" start="3">
<s:iterator>
<s:property />
</s:iterator>
</s:subset>
source:一个集合
count:截取的总数
start:从哪个下标开始截取
4.
<s:debug />标签
<s:debug />
这个标签是专门用于调试用,它会出现一个 [Debug] 按钮,点击后会显示错误信息,请放在 Error 页面。
5.
<s:property />标签
<s:property value="errors" default="默认值" />
这个标签可以取 Value Stack Contents 和 Stack Context 里的信息,把信息直接显示在页面上,此标签和 OGNL 配合,功能强大。
defalt:如果 value 属性取不到值,就掉用到 default 的值。
<s:property value="<hr />" escape="false" />
escape:默认值为true,会把 value 里的字符串解析,如果设置为 false,就不解析,按照 HTML 原样输出。
<s:property value="'x'" />
有个麻烦事,就是 property 直接输出字符串,而不是把 value 值当成 OGNL,想这么做,就把想要输出的字符串加上单引号吧! '-_-'
6.
<s:text name="login.userName">
<s:param value="userName" />
</s:text>
<s:text>的 name:用于国际化,取出 properties 里对应 key 的 value
7.
<s:param>的 value:用于向 properties 文件内的占位符 {0} 传值,它取的是 Action 内定义好的属性。
8.
<s:fielderror />标签
<s:fielderror fieldName="name" />
fieldName:对应一个继承了 ActionSupport 的类,使用 this.addFieldError("name", "Name is error!"),再在跳转后的页面使用 <s:fielderror> 标签,就可以显示 addFieldError 里的信息。
这个标签自动生成 <li> 代码,但是有替代方案。
<s:property value="fieldErrors.error[0]" />
9.
<s:set /> 标签,往这个标签里放东西,它会把东西放在 Stack Context(也称为ActionContext) 里,还会放在 request 里。纳闷的是,request 也是在 Stack Context 里,而且用 <s:debug /> 还看不到 request 里有这么一个键值对。
<s:set var="name" value="roy" />
var:键
value:值,值得注意的是这个值,会被 <s:property /> 优先当做 OGNL 来取值
上面这个标签的取值方式如下
<s:property value="#name" />
<s:property value="#request.name" />
<s:set var="name" value="roy" scope="page" />
<%=pageContext.getAttribute("name") %>
这种写法,用 #号 就取不到了。
10.
<s:bean></s:bean>标签对
<s:bean var="user" name="com.roy.www.dto.User" />
<s:param name="userName" value="'Roy'" /> <!-- name:对象内的属性;value:赋值,注意加单引号,否则当成 OGNL -->
</s:bean>
var:在 Stack Context 里的键
name:类的完整路径
取值:<s:property value="#user.userName" />
11.
<s:include value="/xxx.html" />
这个标签基本不用,用 <%@include file="/xxx.html" %> 就OK了。
<s:include value="%{#includeKey}" />
如楼上写法,这标签会跑到 Stack Context 里去找值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值