struts2常用標簽之數據標簽


數據標簽
1  property標簽
  property標簽的主要屬性:
  value:用來獲取值的OGNL表達式,如果value屬性值沒有指定,那么將會被設定為top,也就是返回位於值棧最頂端的對象。
  default:如果按照value屬性指定的OGNL求值后返回的是空值,但是你仍然希望輸出某些內容,那么就可以使用default屬性來指定這些內容
  escape:是否轉義HTML,默認為true
  escapeJavaScript:是否轉義JavaScript,默認為false
  eg:
  <%@ taglib prefix="s" uri="/struts-tags" %> 
  <% 
      request.setAttribute("request","請求的屬性值"); 
  %> 
  輸出value值: <s:property value="#request['request']"/> 
  <br> 
  輸出缺省值: <s:property value="#request['request2']" default="缺省值"/> 
  <br> 
  輸出棧頂的對象: <s:property/> 
 
  eg:
  <%@ taglib prefix="s" uri="/struts-tags" %> 
  <s:property value="'<hr>'"/> 
  <s:property value="'<hr>'" escape="false"/>
注意
    1 <s:property value="'<hr>'"/>中的value里面的值為'<hr>',這對單引號的意思是,
       單引號里面的東西不按照OGNL表達式來解析,可以直接看成一個字符串。
    2 你會發現,轉義的那個輸出變成了“&lt;hr&gt;”,不轉義的那個是直接輸出成“<hr>”,
      其實轉義,就是把HTML中的一些特殊字符用已經定義好的實體進行替換的過程,常見的HTML轉移字符如下列表:
     
2  set標簽
1:功能:
       對設置的表達式進行求值,並將結果賦給特定作用域中的某個變量。
       簡單點說,set標簽類似於定義一個變量,並賦值。 set標簽有很多應用的地方,比如一個對象在OGNL上的訪問層次較深,就可以使用set標簽給它定義成一個變量,這樣就可以保證在多次引用它的時候更方便。
2:屬性
       set標簽的主要屬性:
id:已過時,請用var代替。
name:已過時,請用var代替。
var:變量名,可以在OGNL表達式中使用這個名稱來引用存放到值棧的這個對象。
scope:變量的生存周期,可以選擇application、session、request、page或action,默認為action。
value:設置給變量的值,可以是常量,也可以是OGNL表達式
 
  eg1
   屬性var和value的使用
   假如現在Session中有一個叫user的屬性,要訪問它的name屬性和age屬性,不用set標簽的話,寫法如下:
    <s:property value="#session.user.name"/> 
    <s:property value="#session.user.age"/>  
   
    如果使用了set標簽,可以給Session中的user屬性定義一個變量,名稱為tempUser,這樣在以后直接訪問這個tempUser就可以了,
     <s:set var="tempUser" value="#session.user"/> 
     <s:property value="#tempUser.name"/> 
     <s:property value="#tempUser.age"/> 
     請注意,使用tempUser這個變量名的時候,需要在前面加上#號
    
eg2
比如要在頁面定義一個int型的變量,然后用標簽來實現類似於i++的功能,該怎么實現呢?
%@ taglib prefix="s" uri="/struts-tags" %> 
  <s:set var="i" value="1"/> 
  輸出i值:<s:property value="#i"/> 
  <br> 
  <s:set var="i" value="#i+1"/> 
  輸出i++后的值:<s:property value="#i"/> 
eg3
    屬性scope的使用
       set標簽的scope屬性有如下選擇:
    application:表示這個變量的生存周期是Servlet中的Application范圍,也就是ServletContext范圍
    session:表示這個變量的生存周期是會話范圍
    request:表示這個變量的生存周期是請求范圍
    page:表示這個變量的生存周期是當前頁面范圍
    action:表示這個變量的生存周期是當前的ActionContext范圍
   
    簡單的示范一下,在第一個頁面中定義變量,當然要設置scope,示例如下:
    <%@ taglib prefix="s" uri="/struts-tags"%> 
    <s:set var="v1" scope="application" value="'aplication范圍的值'"/> 
    <s:set var="v2" scope="session" value="'session范圍的值'"/> 
    <s:set var="v3" scope="request" value="'request范圍的值'"/> 
    <s:set var="v4" scope="page" value="'page范圍的值'"/> 
    <s:set var="v5" scope="action" value="'action范圍的值'"/> 
    運行后跳轉到的結果頁面,示例如下:
    
    <%@ taglib prefix="s" uri="/struts-tags" %> 
    輸出aplication值:<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"/>    
    上述寫法中,尤其要注意輸出page的值,用的是“#attr”,而不是“#page”。
  你會發現request、page、action三個范圍內都沒有值,為什么呢?
       原因很簡單,上面的示例是在上一個頁面展示的時候設置的request值,當提交跳轉到結果頁面的時候,
        這是另外一個request了,因此request里面沒有值是正常的。
       而page里面沒有值就更好理解了,已經是不同的頁面了,當然沒有值了。
       action范圍里面沒有值,是因為,Struts2會為每次請求創建不同的Action實例,請求不同,那么Action實例也就不同,自然action范圍也就沒有值了。
  ---------------------
push標簽
1:功能:
       用來將對象的引用壓入值棧中。
       這也是很有用的,比如:如果一個對象訪問層次過深的時候,
       可以用push標簽來做訪問的簡化。其做法和set標簽不同,push標簽是把指定的對象放到值棧的棧頂,這樣在訪問這個對象的時候,就可以直接訪問它了。
2:屬性:
       push標簽的主要屬性:
       value:用來指定放到值棧棧頂的對象。
eg1
   沿用前面的示例,假如Session中有一個叫user的屬性,需要訪問它的name屬性和age屬性。如果使用push標簽的話,寫法示例如下:
    <s:push value="#session.user"> 
        <s:property value="name"/> 
        <s:property value="age"/> 
    </s:push> 
    請和set標簽的寫法對比一下,這兩個標簽都常用在簡化OGNL訪問的時候,但是有區別的:
    push標簽的作用域是在自己標簽范圍內,兩個<s:property/>都是它的子元素,而set標簽的作用域是ActionContext,所以兩個<s:property/>只要在它后面即可。
    push標簽內的<s:property/>直接引用這個對象的屬性即可,而set標簽后的<s:property/>還要屬性名前加上set標簽為對象取的變量名稱。
    很明顯,當在需要設置多個數據的時候,push標簽會更簡單。
   
-----------------------------------------
bean與param標簽
  1:bean標簽的功能:
       用來創建JavaBean實例,並將其壓入值棧中,可以添加param標簽。
   param標簽的功能:
       用來為其它標簽添加參數化設置的功能,比如為bean標簽初始化JavaBean的屬性的值。
       但是請注意一點:param標簽主要用來配合其它標簽來指定參數,並不是只能與bean標簽連用。
  2:屬性:
       bean標簽的主要屬性:
        name:指定了要創建的JavaBean的全類名,必須要設置
        var:引用這個JavaBean實例的名稱,在bean標簽創建JavaBean實例之后,將這個實例壓入值棧中,其key值就是這個var指定的值。
        param標簽的主要屬性:
        name:參數的名稱
        value:參數的值
  eg1
   來示例一下,使用bean標簽創建JavaBean,並使用param標簽來為它的屬性設置初始值。示例代碼如下:
   <%@ taglib prefix="s" uri="/struts-tags" %> 
    <s:bean name="cn.javass.user.UserModel" var="user"> 
        <s:param name="age" value="100"/> 
    </s:bean> 
    <s:property value="#user.age"/>
    以上的代碼建立了一個叫user的JavaBean,並調用了setAge方法,賦值為100,然后把這個JavaBean實例壓入到值棧中。
    在后面的引用中的“#user.age”,引用的就是剛剛創建的user對象,並調用它的getAge方法。
   
-----------------------------------------------------
url與a標簽
  1:url標簽的功能:
    url標簽用來生成一個url,但是它不顯示在頁面上,需要其他的標簽引用它,
    比如a標簽。url標簽可以包含param標簽,通過param標簽來設置url要傳遞的參數。
  
    a標簽的功能:
     用來生成HTML的<a>標簽,可以通過url標簽來設置它的url,也可以使用param標簽來設置a標簽的url所需要的參數。
  2:屬性:
       url標簽的屬性很多,主要的屬性有:
        namespace:要訪問的Action所在的包的命名空間。
        action:要訪問的Action的名字。
        method:訪問execute方法以外的其他方法。
        id:被放入值棧的名字,其他標簽可以通過這個值來訪問這個url標簽所生成的url。如果指定這個屬性,則url標簽不會在頁面上生成字符串。
        includeContext:生成的URL中是否包含當前上下文。
     
     a標簽的屬性也非常多,主要是與HTML對應,主要的屬性有:
        href:超鏈接的URL
        a標簽與url及其類似,a標簽擁有url標簽的所有屬性,它們之間的不同在於a標簽用來直接生成一個鏈接,而url標簽是用來生成一個字符串。
        a標簽比url標簽還多出來一些屬性,比如onchange,這些屬性都是用來生成對應的HTML的事件的。
 
  eg1
  分多種方式來使用url和a標簽,來體會它們的使用。
   (1)不設置id屬性,示例如下:
     <%@ taglib prefix="s" uri="/struts-tags" %> 
      <s:url action="ognlAction" namespace="/helloworld"> 
          <s:param name="uuid" value="'01'"/> 
      </s:url> 
     這樣做並不會在頁面上生成一個鏈接,而是僅僅生成一個字符串並顯示在界面上,
   結果為:   /helloworld/helloworld/ognlAction.action?uuid=01 
          其中的參數uuid=01正是url標簽的子元素, param標簽生成的。
         
  (2)設置id屬性,示例如下:
    <%@ taglib prefix="s" uri="/struts-tags" %> 
    <s:url action="ognlAction" namespace="/helloworld" id="test"> 
        <s:param name="uuid" value="'01'"/> 
    </s:url> 
    這樣運行,再訪問頁面,發現是一片空白。因為設置了id屬性,url標簽把生成的url字符串放入值棧等待其他的標簽引用。
 
 
   (3)使用a標簽來引用剛剛由url標簽生成的url字符串,示例如下:
      <%@ taglib prefix="s" uri="/struts-tags" %> 
      <s:url action="ognlAction" namespace="/helloworld" id="test"> 
          <s:param name="uuid" value="'01'"/> 
      </s:url> 
      <s:a href="%{test}">超鏈接</s:a> 
      注意:a標簽的href屬性,是通過%{test}來引用值棧中的test的,這樣才能正確的生成一個鏈接。
     
     
   (4)單獨使用a標簽
        把上邊的url標簽和a標簽連用的示例,改成單獨使用a標簽,示例如下:
        <%@ taglib prefix="s" uri="/struts-tags" %> 
        <s:a action="ognlAction" namespace="/helloworld"> 
            <s:param name="uuid" value="'01'"/> 
            超鏈接 
        </s:a>
       
--------------------------------------
    再強調一下
        param標簽,通過這一節的講述可以發現,它和bean標簽、url標簽、a標簽和include標簽都可以連用,
        它不會單獨都使用,都是作為其他標簽的子標簽,用於傳遞參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM