现在的位置: 首页 > 综合 > 正文

Struts2的标签技术之数据标签

2018年05月20日 ⁄ 综合 ⁄ 共 4814字 ⁄ 字号 评论关闭

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,引入页面和被引入页面完全是独立的页面运行,所以不能共享变量。

 

抱歉!评论已关闭.