复习Struts2之控制标签与数据标签
来源:互联网 发布:计算机视觉python 编辑:程序博客网 时间:2024/06/08 07:35
Struts2提供了一系列的标签,用于在页面视图中进行一些简单的逻辑运算,这样极大的方便了开发者的工作,下面就来大体的展示一下在Struts2中的控制标签和数据标签等一些非UI表单组件标签的运用:
一、控制标签:
1.条件判断标签:<s:if../>、<s:elseif../>、<s:else../>
<s:set name="age" value="29" /><s:if test="#age>60" > 老年人</s:if><s:elseif test="#age>35"> 中年人</s:elseif><s:elseif test="#age>15"> 青年人</s:elseif><s:else> 少年</s:else>
注意:在这里if中使用的是#age,因为set标签在Stack Context中定义了一个age属性,但由于Stack Context中只有访问根元素ValueStack中的属性时才不用加#号,访问其它的非根元素才加#;其中当系统创建了一个Action实例后,会将其保存到ValueStack中,故访问Action实例中的属性也不需加#;在StackContext中除了保放有ValueStack还保存了能访5个特殊的对象,它们分别是:
- parametes对象:用于访问HTTP请求参数;调用的是HttpServletRequest的getParameter()方法。
- request对象:用于访问HttpServletRequest对象;调用的是它的getAttribute()方法。
- session对象:用于访问HttpSession对象;调用它的getAttribute()方法。
- application对象:用于访问ServletContext对象;同样调于它的getAttribute()方法。
- attr对象:用于依次搜索PageContext、HttpServletRequest、HttpSession、ServletContext中的属性。
也就是说在OGNL表达式中访问它们时都必须加上前缀#。
2.迭代标签:<s:iterator../>
<table border="1" width="300"> <s:iterator value="{'C++入门经典', 'Java编程思想', 'Ajax权威指南', 'Ruby元编程', 'C#高级编程'}" var="book" status="it" > <tr <s:if test="#it.odd"> style="background-color:#bbbbbb" </s:if>> <td><s:property value="book" /> <br /></td> </tr> <s:if test="#it.last"> <tr <s:if test="#it.even"> style="background-color:#bbbbbb" </s:if>> <td> 共<s:property value="#it.count" />本书 </td> </tr> </s:if> </s:iterator> </table>
提示:其中当使用了status属性后除了使了上面的event、odd、count、last用于判断奇偶,个数和判断是否为最后一个方法外还可使用index用于得到迭代元素的索引。
运行结果如下:
3.分隔标签:<s:generator../>
<h3>在标签内部使用</h3><table width="300" border="1"> <s:generator val="'C++入门经典 ,Java编程思想 , Ajax权威指南,Ruby元编程,C#高级编程'" separator="," > <s:iterator status="bs"> <tr <s:if test="#bs.odd">style="background-color:#bbb"</s:if>> <td><s:property /></td> </tr> </s:iterator> </s:generator></table><br /><br /><h3>在标签外部使用</h3><s:generator val="'C++入门经典 ,Java编程思想 , Ajax权威指南,Ruby元编程,C#高级编程'" separator="," var="books"> </s:generator><table border="1" width="300"> <s:iterator value="#books" status="bs"> <tr <s:if test="#bs.odd">style="background-color:#bbb"</s:if>> <td><s:property /></td> </tr> </s:iterator></table>使用generator标签时,sparator属性是必须的。除了这些属性处还有可选属性count,它用于指定集合元素的总数;可选元素converter用于指定转换器。
运行结果如下:
4.集合合并标签:<s:append../>和<s:marge../>
<s:append var="books1"> <s:param value="#{'C++入门经典':'清华出版社','Java编程思想':'清华出版社'}"/> <s:param value="#{'Ajax权威指南','Ruby元编程','C#高级编程'}" /> </s:append> <s:merge var="books2"> <s:param value="#{'C++入门经典','Java编程思想'}"/> <s:param value="#{'Ajax权威指南':'电子出版社', 'Ruby元编程':'电子出版社','C#高级编程':'清华出版社'}" /> </s:merge> <h3>append标签合并的结果</h3> <s:iterator value="books1"> <s:property value="key" />| <s:property value="value" /><br /> </s:iterator> <br /> <h3>merge标签合并结果</h3> <s:iterator value="books2"> <s:property value="key" />| <s:property value="value" /><br /> </s:iterator>
这两个标签用法基本相同,同时支持List与List之间的合并,Map与Map之间的合并和Map与List之间的合并,它前主要的区别是合并后排列的顺利不同,如下的运行结果:
5.取子集合标签:<s:subset../>
由于subset中存在一个可选decider属性:用于添加一个实现org.apache.struts2.util.SubsetIteratorFilter.Decider过滤类,所以我们事先要准备一个自定义Decider类,如下:
package org.websoft.bean;import org.apache.struts2.util.SubsetIteratorFilter;public class MyDecider implements SubsetIteratorFilter.Decider {@Overridepublic boolean decide(Object element) throws Exception {String value = (String)element;return value.contains("编程");}}
接下来使用subset标签如下:
<s:bean var="myDecider" name="org.websoft.bean.MyDecider" /> <s:subset source="{'C++入门经典', 'Java编程思想', 'Ajax权威指南', 'Ruby元编程', 'C#高级编程'}" start="2" decider="#myDecider" var="newList"> </s:subset> <%//注意这里由于使用的是subset的var属性,故使用了attr对象来获取 %> <s:iterator value="#attr.newList"> <s:property /><br /> </s:iterator>应该特别注意的是在这里获取子集合时使用的是attr对象,单纯使用#newList可能得不到值,因为subset的var属性是将新集合放入pageScope内,并不是StackContext中,同其它标签不同。
其中的start属性用于指定从第三个元素开始选取包含"编程"字样的元素,除了这些属性,还有count用于指定选取个数的属性,则上面的运行结果如下:
6.排序标签:<s:sort../>
由于在使用sort时它存在一个必填属性comparator:它于用指定定义排序规则的java.util.Comparator实例,故首先定义一个Comparator类如下:
package org.websoft.bean;import java.util.Comparator;@SuppressWarnings("unchecked")public class MyComparator implements Comparator {@Overridepublic int compare(Object value1, Object value2) {return value1.toString().length() - value2.toString().length();}}
接着在页面上使用sort标签调用:
<s:bean var="myDecider" name="org.websoft.bean.MyDecider" /> <s:subset source="{'C++入门经典', 'Java编程思想', 'Ajax权威指南', 'Ruby元编程', 'C#高级编程'}" start="2" decider="#myDecider" var="newList"> </s:subset> <%//注意这里由于使用的是subset的var属性,故使用了attr对象来获取 %> <s:iterator value="#attr.newList"> <s:property /><br /> </s:iterator>
注意上面获取排列后的列表也是使用的attr对象获取。
其上运行结果如下:
二、数据标签
摘录:李刚--《轻量级J2EE企业应用实战---Struts2+Spring3+Hibernate整合开发》第3版
1.action标签
功能:允许在JSP页面中直接调用Action
属性:
- var 可选,将该action放入ValueStack中
- name 必填,指定Action的名称
- namespace 可选,Action所在namespace命名空间
- executeResult 可选,是否包含Action的执行结果到当前页面,默认为false,即不含。
- ignoreContextParams 可选,指定该页面的请求参数是否需要传入调用的Action,默认为true,表传入。
2.bean标签
功能:创建JavaBean实例
属性:
- name 必填,要实例化JavaBean的类全名。
- var 可选, 指定实例化后的JavaBean实例名。
3.date标签
功能:用于格式化一个时间
属性:
- format 可选,指定时间格式。
- nice 可选,是否输出指定日期与当前时刻之间的时差。默认为false
- name 必填,要格式化的日期。
- var 可选,将格式化的字符串放入StackContext。
注意,如果指定nice="ture"后再同时指定format属性,则format将失效,即输出时差。
4.debug标签
功能:用于查看ValueStack和StackContext中所有的值信息。
在页面中直接使用<s:debug />
5.include标签
功能:用于将JSP页面,或者一个Service包含到本地页面中。
属性:
- value 必填,指定包含的JSP页面或Servlet。
6.param标签
功能:为其它标签提供参数。
属性:
- name 可选,设置参数名。
- value 可选,指定参数值。
7.push标签
功能:将某个值放到ValueStack的栈顶。
属性:
- value 必填,指定将推入栈顶的属性。
注意,被push标签放入ValueStack中的对象只在push标签内时才有效,一旦离开push标签,则刚放入的属性将被移出ValueStack。
8.set标签
功能:用于将某值放入指定范围内。
属性:
- scope 可选,指定范围,有application,session,request,page或action 5个值,默认为action。
- value 可选,指定的变量值。
- var 可选,指定后的变量名。
9.url标签
功能:生成一个URL地址。
属性:
- action 可选,指定生成URL为哪 个action,如果不提供则使用value属性。
- anchor 可选,指定URL锚点。
- encode 可选,指定是否需要对参数进行编码,默认为true。
- ecapeAmp 可选,是否需对&编码,默认为true。
- forceAddSchemeHostAndPort 可选,强调添加scheme、主机和端口号,默认false。
- includeContext 可选,指定是否添加上下文到URL中。
- includeParams 可选,指定是否包含请求参数,该参数只能为none、get、all。默认为get。
- method 可选,指定Action的方法。如果指定了action属性。则将URL链接到指定Action的特点方法。
- namespace 可选,Action的命名空间。
- portletMode 可选,指定结果页面的portlet模式。
- scheme 可选,用于设置scheme属性。
- value 可选,指定生成URL的地址值,如果value值不提供就用action值属性指定。
- var 可选,用于指定就该属性放入ValueStack中。
- windowState 可选,指定结果页面的portlet的窗口状态。
10.property标签
功能:输出指定值,property标签输入出value属性指定的值。
属性:
- default 可选,如果需要输出的值为null,则显示default属性指定的值。
- escape 可选,指定是否escapeHTML代码,默认为true。
- value 可选,指定需要输出的值,如果没有指定value属性,则默认输出ValueStack栈顶值。
- 复习Struts2之控制标签与数据标签
- Struts2之控制标签
- J2EE系列之Struts2学习笔记(十六)--Struts2标签(数据标签、控制标签)
- Struts2标签库笔记之控制标签
- Struts2的标签技术之控制标签
- Struts2 控制 标签 之 append
- Struts2通用标签之数据标签
- Struts2的标签技术之数据标签
- Struts2通用标签之数据标签
- Struts2之数据标签(一)
- Struts2之数据标签(二)
- Struts2 控制 标签 之 if elseif else
- Struts2 控制 标签 之 Generator Tag
- Struts2 控制 标签 之 Iterator Tag
- Struts2 控制 标签 之 Merge Tag
- Struts2 控制 标签 之 Subset Tag
- struts2常用标签库之逻辑控制标签
- Struts2的标签库(一)之控制标签
- 想求同类别的本条记录的in_date_time-上条记录的out_date_time
- Android2.3 修改默认时区
- 创建 RegisterAction
- POJ 1088 动态规划
- 【iOS-Cocos2d游戏开发之八】开启高清(960*640)模式问题与解答、图片适配以及设置iphone横竖屏
- 复习Struts2之控制标签与数据标签
- java.sql.SQLException: 关闭的连接
- 创建Struts 配置文件 (struts-config.xml)
- Android库项目的导出及其引用资源
- Data type conversions for API calls from Visual Basic
- 谈一谈我对java单继承和多继承的理解。
- Iphone之UITableView
- 跨域的理解与实现
- 【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的".pvr.ccz",".plist"共用的终极精灵优化及注意事项!