1:Struts2标签的分类
*数据标签:用于从值栈上取值或者向值栈赋值
*控制标签:控制程序的运行流程,比如分支和循环控制
*UI标签:用来显示UI页面的标签,多会生成HTML
*杂项标签: 用于完成其他功能的标签,比如生成URL和输出国际化文本等。
2:property标签
常见的一些属性:
value: 用来获取值的OGNL表达式
escape: 是否转义HTML,默认为true
escapeCsv: 是否转印CSV文件
escapeHtml:是否转义html
escapeJavaScript: 是否转义javascript
escapeXml: 是否转义xml
简单示例1:
<s:push value="myBean"> <!-- Example 1: --> <s:property value="myBeanProperty" /> <!-- Example 2: -->TextUtils <s:property value="myBeanProperty" default="a default value" /> </s:push><s:property value="'<hr>'"/> <s:property value="'<hr>'" escape="false"/>
Example 1 prints the result of myBean's getMyBeanProperty() method. Example 2 prints the result of myBean's getMyBeanProperty() method and if it is null, print 'a default value' instead
简单示例2:
<body> <% request.setAttribute("request", "request中的值"); %> 输出value值:<s:property value="#request.request"/><br> 输出缺省值:<s:property value="#request.default" default="request中的默认值"/><br> 输出栈顶对象:<s:property/> </body>
输出value值:request中的值 输出缺省值:request中的默认值 输出栈顶对象:com.opensymphony.xwork2.DefaultTextProvider@a415a3简单示例3,属性escape的使用:
<s:property value="'<hr>'"/> <s:property value="'<hr>'" escape="false"/>
3:set 标签
*功能:对设置的表达式进行求值,并将结果赋给特定作用域中的某个变量,简单的说,set标签类似于定义一个变量并赋值。
*属性:var,变量名,可以在OGNL表达式中使用这个名称来引用存放到值栈的这个对象。
scope:变量的生存周期,可以选择application, session, request, page 或者action
value: 设置给变量的值,可以是常量,可以是OGNL表达式。
使用<s:property>来获取session中属性的值:
<s:property value="#session.user.name"/> <s:property value="#session.user.age"/>
设置一个变量用来保存session中属性的值:
<s:set var="tempUser" value="#session.user"></s:set> <s:property value="#tempUser.name"/> <s:property value="#tempUser.age"/>
<s:set var="i" value="1" /> 输出i值:<s:property value="#i"/><br> <s:set var="i" value="#i + 1" /> 输出i值:<s:property value="#i"/>
输出结果:输出i值:1
输出i值:2
*scope属性的使用:
* application: 表示这个变量的生存周期是Servlet中的Application范围,也就是ServletContext范围
* session: 表示这个变量的生存周期是会话范围
*request: 表示这个变量的生存周期是请求范围
*page: 表示这个变量的生存周期是当前页面范围
*action: 表示这个变量的生存周期是当前的ActionContext范围
示例:
<s:set var="v1" scope="application" value="'application范围的值'"></s:set> <s:set var="v2" scope="session" value="'session范围的值'"></s:set> <s:set var="v3" scope="request" value="'request范围的值'"></s:set> <s:set var="v4" scope="page" value="page范围属性的值"></s:set> <s:set var="v5" scope="action" value="'action范围的值'"></s:set> <a href="set_output.jsp">跳转到输出界面</a>
输出application范围的值:<s:property value="#application['v1']"/><br> 输出session范围的值:<s:property value="#session['v2']"/><br> 输出request范围的值:<s:property value="#request['v3']"/><br> 输出page范围的值:<s:property value="#attr['v4']"/><br> 输出action范围的值:<s:property value="#v5"/><br>
输出的值:输出application范围的值:application范围的值
输出session范围的值:session范围的值
输出request范围的值:
输出page范围的值:
输出action范围的值:
*当提交跳转到另一个页面的时候,这是另一个request了,因此request没有值是正常的。
*因为是不同的page,所以输出页面没有值也是很正常的。
*action范围内没有值,是因为,Struts 2会为每次请求创建不同的action实例,请求不同,那么action实例也不同,自然action范围也没有值了。
4:push标签
*功能:用来将对象的引用压入到值栈中。是把指定的对象放到值栈的栈顶,这样在访问这个对象的时候,就能够直接访问它了。
5:bean和param标签
*bean标签用来创建javabean实例,并将其压入到值栈中,可以添加param标签
*param便签用来为其他标签添加参数化设置的功能,比如为bean标签初始化JavaBean的属性的值,param标签主要是用来配合其他便签来指定
参数,并不是只能与bean标签连用。
<s:bean name="com.capinfotech.model.User" var="user"> <s:param name="age" value="20" /> </s:bean> <s:property value="#user.age"/>
6:date标签
用来格式化输出一个日期数据
*format属性:用于指定日期显示的格式,形如yyyy-MM-dd,如果不指定的话,将会去找国际化信息中key为struts.date.format中的特定值
*name:被格式化的值,必须设置,它本身是一个OGNL表达式
*nice:是否显示当前时间与指定时间的差,如果设置为true,则不再显示指定时间,只显示当前时间与指定时间的差
<% Timestamp t = Timestamp.valueOf("2010-09-22 00:00:00"); Date d = new Date(t.getTime()); request.setAttribute("d", d); %> 当前日期为:<s:date name="#request.d" format="yyyy-MM-dd"/><br> 当前时间与指定时间之间:<s:date name="#request.d" format="yyyy-MM-dd" nice="true"/>
输出内容:
当前日期为:2010-09-22
当前时间与指定时间之间:one year, 157 days ago
7:url和a标签
* url标签用来生成一个url,但是它不显示在页面上,需要其他的标签引用它,比如a标签,url标签可以包含param标签,通过param标签来设置url要传递的参数
*a标签用来生成HTML的<a>标签,可以通过url标签来设置它的url,也可以使用param标签来设置a标签的url所需要的参数。
*url标签的属性
*namespace:要访问的Action所在的包的命名空间
*action:要访问的Action的名字
*method:访问execute方法以外的其他方法
*id:被放入值栈的名字,其他标签可以通过这个值来访问这个url标签所生成的url,如果指定这个属性,则url标签不会在页面上生成字符串。
*includeContext: 生成的URL是否包含当前上下文
a标签与url标签的的区别是a标签用来生成一个链接,而url便签用来生成一个字符串
简单示例1:不设置id属性
<s:url action="ognlAction" namespace="/hello"> <s:param name="uuid" value="'01'" /> </s:url>这样做在页面上不会生成一个链接,而是仅仅生成一个字符串并显示在页面上,如下所示:
/Struts2DemoSrc/hello/ognlAction.action?uuid=01简单示例2:设置id属性
<s:url action="ognlAction" namespace="/hello" id="test"> <s:param name="uuid" value="'01'" /> </s:url>这样运行,再访问页面,发现是一片空白,因为设置了id属性,url标签把生成的url字符串放入值栈等待其他的标签使用
简单示例3:使用a标签来引用刚刚由url标签生成的url字符串
<s:url action="ognlAction" namespace="/hello" id="test"> <s:param name="uuid" value="'01'" /> </s:url> <s:a href="%{test}">超链接</s:a>a标签中的href属性,是通过%{test}来引用值栈中的test的,这样才能正确的生成一个链接。
简单示例4:单独使用a标签,来把上边的url标签和a标签连用的示例。
<s:a action="ognlAction" namespace="/hello" > <s:param name="uuid" value="'01'" /> 超链接 </s:a>
8:include标签和param标签
include标签的功能,就是把其他页面包含到当前的页面上,include标签类似于JSP的include标准动作,也是一种动态引入,在运行期间动态引入被引入页面所生成的HTML,引入页面和被引入页面完全是独立的页面运行,所以不能共享变量。