struts2提供的一套from标签使得数据的展示变得非常容易,想必这是它如此流行的原因之一,真的很方便。。
首先,为了能够使用struts2提供的标签,我们需要先添加标签的引用
在JSP页面上添加,uri的具体值可以在struts2包的META-INF的struts-tags.tld文件中查看
<%@taglib prefix="s" uri="/struts-tags"%>
先看一下最常用的
1 <s:property value="str" default="" escapeCsv="" escapeHtml="" escapeJavaScript="" escapeXml=""/>
和EL表达式${str}的作用类似,展示动态数据,只不过property标签强化了很多功能,可以免去判断直接设定默认值,忽略cvs,html等内容,虽然struts2的标签不支持EL表达式但是有一种类似的写法
1 <s:property value="%{str}"/>
其次是流程控制标签
1 <s:if test="condition != null">
2 <!--你的代码-->
3 </s:if>
test的内容可以使用OGNL表达式获取,除了Java那些常规的判断写法,可以将&&可以写作and,||可以写作or,和JSTL的判断类似,都有自己的个性
之后是迭代标签,迭代标签可以说是struts2标签中最常用的标签之一,不仅是因为列表功能很常见,而且迭代标签给出了很好用的功能
假定vals是个list,那么遍历这个list
1 <s:iterator value="vals" var="val" begin="0" end="5" status="st" step="2">
2 <s:property value="val"/>-<s:property value="#st.index"/>-<s:property value="#st.count"/><br>
3 </s:iterator>
begin和end属性可以灵活的设定遍历的区间,step则是步进的长度,但是step必须在指定了begin之后才生效,特别要说明status这个属性,声明了st之后,便可以获得当前遍历的下标或者行号,这样一来就可以根据需求执行其他的操作。var属性则声明了当前的遍历对象,使用var属性之后,会在ValueStack中的root和ActionContext中各生成一份当前对象,所以也可以写为
<s:property value="#val"/>,如果不声明var属性,则只会在root中生成一份当前对象,是否声明var属性,取决于当前遍历的元素类型,比如vals是一个user列表,那么迭代标签会把当前迭代的user对象置于栈顶,循环内直接写
<s:property value="name"/>就可以获取user的name值,无需声明var属性。
假定vals是个map,那么遍历这个map
1 <s:iterator value="mapVals" var="val" begin="0" end="5" status="st" step="2">
2 <s:property value="mapVals.get(#val.getKey())"/>-<s:property value="#st.index"/>-<s:property value="#st.count"/><br>
3 </s:iterator>
或者写为
1 <s:iterator value="mapVals.keySet()" var="keyId" begin="0" end="5" status="st" step="2">
2 <s:property value="mapVals.get(#keyId)"/>-<s:property value="#st.index"/>-<s:property value="#st.count"/><br>
3 </s:iterator>
一些其他的表单标签
1 <s:textfield label="username" name="%{user.username}"/>
2 <s:checkboxlist name="name" label="多选框" list="#{'1':'Nick','2':'lily','3':'Mary' }" listKey="key" listValue="value" value="#{'1','2'}"/>
3 <s:radio label="Conutry" name="Conutry" value="2" list="#{'1':'中国','2':'美国','3':'俄罗斯' }" listKey="key" listValue="value"/>
4 <s:select list="users" label="姓名" value="1" listKey="id" listValue="username" headerKey="-1" headerValue="请选择"/>
这些标签虽然能很好的完成任务,但是不怎么灵活,一般来说前端的这些控件或多或少的都需要的添加自定义的样式,所以这些标签出现的机会比较少,只是简单记录一下。
还有很多其他的标签,比如form等,HTML自带标签完全可以满足一般需求。
这里特别提一下两个工具类的标签,其中格式化时间的date标签用的比较频繁,其次格式化数字的标签number,可以用来截取数字长度,四舍五入等操作
1 <s:date name="time" format="yyyy-MM-dd"/>
2 <s:number name="money"/>