1. 程式人生 > >struts2通用標簽

struts2通用標簽

也會 外部 spa hang iterator push標簽 叠代器 sco deb

Struts2框架為我們提供了很多標簽,這些標簽總體上可以分為兩類:通用標簽和UI標簽。通用標簽分為兩類:數據標簽和控制標簽。數據標簽用於訪問值棧中數據,控制標簽用於控制呈現頁面時數據執行流程。使用Struts 2框架的標簽庫,需要在頁面引入以下代碼:

<%@ taglib uri="/struts-tags" prefix="s"%>

數據標簽:

property、set、push、param、bean、action、include、url、a、i18n、text、date、debug

1、property標簽:

property標簽用於輸出值棧中對象的屬性值,value屬性就是要輸出的值。如果沒有執行value屬性,那麽默認就會輸出棧頂對象

技術分享

技術分享

property標簽的屬性包括:

名稱是否必需說明
default 如果value屬性是null,則輸出default的值
value 進行求值的表達式

2、set標簽:

set標簽是將一個值賦給指定範圍的變量。set標簽的屬性包括:

名稱是否必需說明
name 變量的名字
value 指定一個表達式,將計算的結果賦給變量。如果沒有執行value屬性,默認將棧頂對象賦給變量
scope 變量的範圍,有application、session、request、page和action(默認值)

註意:在使用默認scope的值,即action範圍的時候,value屬性值會保存在request和OgnlContext(OGNL上下文)中。

action:

技術分享

jsp:

技術分享

結果:

技術分享

3、push標簽:

push標簽的作用是將一個對象放入值棧中,所以push對象位於棧頂,但是push標簽結束之後,棧頂的元素將會被刪除,因此需要訪問push的對象需要在push標簽的內部訪問。push標簽只有屬性value,這也是一個必需提供的屬性。具體在開發中push標簽的作用是簡化對屬性的訪問。比如需要訪問一個User對象的name屬性和age屬性,正常在jsp頁面使用Struts 2標簽庫進行訪問的方式是#request.user.name#request.user.age(假設是request範圍),而使用push標簽,訪問name屬性的方式是:

<s:push value="#request.user">
    姓名:<s:property value="name"/>
    年齡:<s:property value="age"/>
</s:push>

4、param標簽:

param標簽通常是作為其他標簽的子標簽,用於為其他標簽提供參數。param標簽有兩個非必需屬性name和value。其中的name屬性是要設置參數的名字,value則是該參數的值。使用param標簽有兩種方式:<param name="username" value="zhangsan"/><param name="username">zhangsan</param>。在第一種方式中,value屬性並不會作為name屬性的值,而是表達式對待,因此如果zhangsan屬性是空的話,將得到null ,所以需要把value改成%{‘zhangsan‘}。第二種訪問方式是沒有什麽問題的。

5、bean標簽:

bean標簽相當於jsp中的useBean標簽,bean標簽通常用於實例化一個JavaBean對象,一個bean標簽內部可以有多個param標簽,用於為bean實例設置屬性值(要求有set方法)。bean標簽有兩個屬性:name和id。其中的name屬性是要實例化的bean的完整類名,id用於指定一個名字,用於引用放入OgnlContext中的JavaBean對象。這裏需要註意的是,出了bean標簽,放入棧頂的實例(用bean標簽創建的JavaBean對象會放入棧頂)會被移除。但是如果指定了id屬性,在bean標簽的外部就可以訪問了。此時需要使用#符號。因此需要創建可以在bean標簽的外部也可以訪問到的bean實例,就需要指定id屬性。

6、action標簽:

通過指定action的名字和可選的命名空間,action標簽允許在jsp頁面直接訪問action。如果將action標簽的executeResult屬性設置為true,那麽action對應的輸出結果也會包含在本頁面中。

7、include標簽:

該標簽類似於jsp中<jsp:include></jsp:include>標簽。在標簽的內部可以包含多個param標簽,用於向被包含的頁面傳遞參數。include標簽只有一個value屬性,用於指定被包含的jsp或者Servlet。

技術分享

獲取值:

技術分享

結果:

技術分享

8、url標簽:

技術分享

技術分享

控制標簽:用於在呈現頁面的時候控制程序的執行流程。常用的控制標簽包括:

if/elseif/else

iterator

generator

1、if/elseif/else 標簽:

<body>
    <s:set name="score" value="75"></s:set>
        成績等級:
    <s:if test="#score < 60">不及格</s:if>
    <s:elseif test="#score < 80">良好</s:elseif>
    <s:else>優秀</s:else>
  </body>

2、iterator標簽:

iterator標簽用於叠代一個集合的元素,在叠代的過程中,會暫時把叠代的對象壓入棧頂,這樣在標簽的內部可以訪問對象的屬性值了。訪問結束之後,會把棧頂的叠代對象移除,並把下一次叠代的對象壓入棧頂。這樣一直到所有的對象叠代完畢。iterator標簽有三個屬性:id、value和status。id屬性幾乎不使用,value屬性用於指定叠代的集合,status屬性可以獲取叠代中的一個狀態信息(比如索引值、是否是奇數、偶數等),其所有的方法如下:

  • public int getCount():得到叠代元素的總數
  • public int getIndex():得到當前叠代元素的索引
  • public boolean isEven():判斷當前叠代的元素的順序是否是偶數
  • public boolean isOdd():判斷當前叠代的元素的順序是否是奇數
  • public boolean isFirst():判斷當前叠代的元素是否是第一個元素
  • public boolean isLast():判斷當前叠代的元素是否是最後一個元素
<body>
    <s:iterator value="{‘劉備‘,‘張飛‘,‘關羽‘}" status="s">
        <p>當前元素:<s:property /></p>
        <p>當前元素總數:<s:property value="#s.count"/></p>
        <p>當前元素索引:<s:property value="#s.index"/></p>
        <p>當前元素是否為偶數:<s:property value="#s.even"/></p>
        <p>當前元素是否是奇數:<s:property value="#s.odd"/></p>
        <p>當前元素是否是第一個數:<s:property value="#s.first"/></p>
        <p>當前元素是否是最後一個數:<s:property value="#s.last"/></p>
        <hr>
    </s:iterator>
  </body>

3、generator標簽:

generator標簽主要是根據分隔符對元素進行處理,該標簽一般和iterator標簽同時使用,在generator標簽的內部可以使用iterator標簽對處理之後的元素進行叠代,下面是一個例子:

 <body>
    <s:generator separator="," val="‘劉備,張飛,關羽‘">
        <s:iterator>
            <s:property/>
        </s:iterator>
    </s:generator>
  </body>

generator標簽中上述的separator屬性和val屬性是必需的,如果指定了id屬性,那麽將以id屬性的值作為key,將生成的叠代器保存在pageContext對象中。

struts2通用標簽