Struts2 标签库(上)[Tablib]
来源:互联网 发布:js设置css样式属性 编辑:程序博客网 时间:2024/05/19 10:39
http://blog.163.com/zrj_518/blog/static/197000020083322713735/Struts2 Taglib抽象了不同表示技术,现在Struts2主要支持三种表示技术:JSP,FreeMarker和Velocity。但部分的Tag在三种表示技术下都可以使用,但是也有部分只能在某一种情况下使用。 Tab可以分为两类:通用标签和UI标签。一、通用标签通用标签用来在页面表示的时候控制代码执行的过程,这些标签也允许从Action或者值堆栈中取得数据。例如地域,JavaBeans,URLs,和action。 控制标签控制程序执行,例如:if,else,iterator数据标签管理数据的取得和创建,例如:bean,push,i18n 控制标签 if标签描述 If标签用来控制基本的条件处理流程,通常和else标签或者elseif标签连用。 参数名字是否必须默认值可否使用表达式类型描述id否 是String 用来表示该元素,对于UI和Form标签来说直接转变为HTML id属性test 是 是Boolean 用来决定是否显示标签内部内容的表达式 例子<s:if test="%{false}"> <div>Will Not Be Executed</div></s:if><s:elseif test="%{true}"> <div>Will Be Executed</div></s:elseif><s:else> <div>Will Not Be Executed</div></s:else> elseIf 标签参考if标签 else 标签参考if标签 append标签描述用来做iterator标签的辅助,将不同iterator中的内容合在一个iterator中。 参数名字是否必须默认值可否使用表达式类型描述id否 是String用来保存结果iterator的对象在value context中的名字 例子Action类public class AppendIteratorTagAction extends ActionSupport { private List myList1; private List myList2; private List myList3; public String execute() throws Exception { myList1 = new ArrayList(); myList1.add("1"); myList1.add("2"); myList1.add("3"); myList2 = new ArrayList(); myList2.add("a"); myList2.add("b"); myList2.add("c"); myList3 = new ArrayList(); myList3.add("A"); myList3.add("B"); myList3.add("C"); return "done"; } public List getMyList1() { return myList1; } public List getMyList2() { return myList2; } public List getMyList3() { return myList3; } 标签使用<s:append id="myAppendIterator"> <s:param value="%{myList1}" /> <s:param value="%{myList2}" /> <s:param value="%{myList3}" /></s:append><s:iterator value="%{#myAppendIterator}"> <s:property /></s:iterator> generator 标签(JSP Tag)描述从val属性生成一个iterator。 参数例子例1:生成一个简单的iterator,并且使用iterator标签打印出内容。<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}"> <s:iterator> <s:property /><br/> </s:iterator></s:generator> 例2:生成一个iterator,使用count属性。因为count属性值为3,所以只有前三个内容(aaa,bbb,ccc)在生成的iterator中。Generate an iterator with count attribute<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3"> <s:iterator> <s:property /><br/> </s:iterator></s:generator> 例3:生成iterator,使用了id属性,之后生成的对象放在pageContext中,可以通过指定的id来访问。<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" /><% Iterator i = (Iterator) pageContext.getAttribute("myAtt"); while(i.hasNext()) { String s = (String) i.next();%> <%= s %> <br/><%} %> 例4:生成iterator,使用converter属性,这里的convertor仅仅将每一个对象添加了一个"converter-"前缀。<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}"> <s:iterator> <s:property /><br/> </s:iterator></s:generator> public class GeneratorTagAction extends ActionSupport { .... public Converter getMyConverter() { return new Converter() { public Object convert(String value) throws Exception { return "converter-"+value; } }; } ... } iterator 标签描述迭代处理一个java.util.Connection或者java.util.Iterator对象 参数名字是否必须默认值可否使用表达式类型描述id否 是StringIdstatus否否是Boolean如果指定,在循环的过程中会保留一个IteratorStatus类型的变量,该变量用来查询当前迭代的状态value否 是String被迭代的对象例子例1:<s:iterator value="days"> <p>day is: <s:property/></p></s:iterator> 例2:<s:bean name="org.apache.struts2.example.IteratorExample" id="it"> <s:param name="day" value="'foo'"/> <s:param name="day" value="'bar'"/></s:bean><p/><table border="0" cellspacing="0" cellpadding="1"><tr> <th>Days of the week</th></tr><p/><s:iterator value="#it.days" status="rowstatus"> <tr> <s:if test="#rowstatus.odd == true"> <td style="background: grey"><s:property/></td> </s:if> <s:else> <td><s:property/></td> </s:else> </tr></s:iterator></table> 例3:<s:iterator value="groupDao.groups" status="groupStatus"> <tr class="<s:if test="#groupStatus.odd == true ">odd</s:if><s:else>even</s:else>"> <td><s:property value="name" /></td> <td><s:property value="description" /></td> <td> <s:iterator value="users" status="userStatus"> <s:property value="fullName" /><s:if test="!#userStatus.last">,</s:if> </s:iterator> </td> </tr> </s:iterator> merge 标签(同append?)描述参数例子 sort 标签(JSP-Tag)描述对一个可以迭代的对象进行排序操作。 参数名字是否必须默认值可否使用表达式类型描述Comparator是 是java.util.Comparator排序用的比较器Source否 是String排序对象 例子例1:<s:sort comparator="myComparator" source="myList"> <s:iterator> <!-- do something with each sorted elements --> <s:property value="..." /> </s:iterator></s:sort> 例2:<s:sort id="mySortedList" comparator="myComparator" source="myList" /><% Iterator sortedIterator = (Iterator) pageContext.getAttribute("mySortedList"); for (Iterator i = sortedIterator; i.hasNext(); ) { // do something with each of the sorted elements }%> subset描述递归iterator的一部分 参数名字是否必须默认值可否使用表达式类型描述countFalse 是IntegerIterator中被递归的一部分的item的数量Decider否 是org.apache.struts2.util. SubsetIteratorFilter.Decider用来判断iterator中的item是否包含在最终的subset内部Source否 是StringIterator的对象Start否 是Integer开始位置 例子Java类 public class MySubsetTagAction extends ActionSupport { public String execute() throws Exception { l = new ArrayList(); l.add(new Integer(1)); l.add(new Integer(2)); l.add(new Integer(3)); l.add(new Integer(4)); l.add(new Integer(5)); return "done"; } public Integer[] getMyArray() { return a; } public List getMyList() { return l; } public Decider getMyDecider() { return new Decider() { public boolean decide(Object element) throws Exception { int i = ((Integer)element).intValue(); return (((i % 2) == 0)?true:false); } }; } }<!-- s: List basic --> <s:subset source="myList"> <s:iterator> <s:property /> </s:iterator> </s:subset><!-- B: List with count --> <s:subset source="myList" count="3"> <s:iterator> <s:property /> </s:iterator> </s:subset><!-- C: List with start --> <s:subset source="myList" count="13" start="3"> <s:iterator> <s:property /> </s:iterator> </s:subset><!-- D: List with id --> <s:subset id="mySubset" source="myList" count="13" start="3" /> <% Iterator i = (Iterator) pageContext.getAttribute("mySubset"); while(i.hasNext()) { %> <%=i.next() %> <% } %><!-- D: List with Decider --> <s:subset source="myList" decider="myDecider"> <s:iterator> <s:property /> </s:iterator></s:subset> 数据标签@TODO 完成如下数据标签数据标签包括aactionbeandatedebugi18nincludeparampushsettexturlproperty