Struct標籤

 

 

  • 通用標籤:

               1. propertycss

               2. sethtml

                         i.          默認爲action scope,會將值放入request和ActionContext中ajax

                         ii.          page、request、session、application數組

              3.  beansession

              4.  include       (對中文文件支持有問題,不建議使用,如需包含,改用jsp包含)app

              5.  param框架

              6.  debugjsp

  • 控制標籤

              1.  if elseif elseide

              2.  iterator測試

                         i.          collections map enumeration iterator array

              3.  subset

  • UI標籤

              1.  theme

                         i.         simple xhtml(默認) css_xhtml ajax

  • AJAX標籤

              基本不用,直接用Ajax框架

 

  • $ # %的區別

              1.  $用於i18n和struts配置文件

              2.  #取得ActionContext的值

              3.  %將本來的文本屬性解析爲ognl,對於原本就是ognl的屬性不起做用

                         i.     參考<s:property 和 <s:include>

 

 

 

說明一點,每個標籤的屬性,有的是字符串,有的是Ognl表達式

好比標籤property:

    若是這個屬性是Object類型,就會把屬性value裏的字符串解析成Ognl表達式

 

 

 

 

 property

 實例:

<action name="tags" class="com.bjsxt.struts2.tags.TagsAction">
            <result>/tags.jsp</result>
 </action>

 

 

 TagsAction:

public class TagsAction extends ActionSupport {

    private String password;

    private String username;

    public TagsAction() {
    }

    public String execute() {
        this.addFieldError("fielderror.test", "wrong!");
        return SUCCESS;
    }
    
    public String getPassword() {
        return password;
    }

    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
}
View Code

 

 

 tags.jsp

 <li>property: <s:property value="username"/> </li>
<li>property 取值爲字符串: <s:property value="'username'"/> </li> <li>property 設定默認值: <s:property value="admin" default="管理員"/> </li> <li>property 設定HTML: <s:property value="'<hr/>'" escape="false"/> </li>

 

  •     對於第一行,由於property的value值是ognl表達式,因此直接去值棧中取
  •     若是想表達的是一個普通字符串,那麼就用雙引號裏面加上單引號
  •     值棧裏面沒有叫作admin的變量,因此爲他設定默認值,他纔有用 

 

 

set

 

      何時會用到set標籤

      只是作jsp開發的時候不多能用到,可是有時候能夠爲一個特別長或者特別難寫的變量設置別名等,可能會用到

 

  可見id和name都不用設置了,只須要var就行

 

  •    scope範圍,不設置的話默認是action,指的是這個變量會放在request 和 ActionContext
  •     若是設置的話,就放在設置的範圍裏面
 默認範圍:
<li>set 設定adminName值(默認爲request 和 ActionContext): <s:set var="adminName" value="username" /></li> <li>set 從request取值: <s:property value="#request.adminName" /></li> <li>set 從ActionContext取值: <s:property value="#adminName" /></li>

設定範圍 <li> 範圍爲page: <s:set name="adminPassword" value="password" scope="page"/></li> <li> 從相應範圍取值: <%=pageContext.getAttribute("adminPassword") %> --%> <li> 範圍爲session: <s:set var="adminPassword" value="password" scope="session"/></li> <li> 從相應範圍取值: <s:property value="#session.adminPassword"/> </li>

 

 

 

bean

 

 

bean的做用就是生成一個類的對象

      <li>bean 定義bean,並使用param來設定新的屬性值:
            <s:bean name="com.bjsxt.struts2.tags.Dog" >
                <s:param name="name" value="'pp'"></s:param>   //這個name的屬性值,就是Dog類的成員,表示爲哪個成員賦值
                <s:property value="name"/>                     
            </s:bean>            
        </li>

 

 

Dog:

package com.bjsxt.struts2.tags;

public class Dog {
    
    private String name;
    
    public Dog() {
        
    }

    public Dog(String name) {
        super();
        this.name = name;
    }
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "dog: " + name;
    }
}
View Code

 

 

        當使用bean的時候,就會生出一個對象,而且壓到棧頂,在bean標籤的內部能夠使用這個對象,可是一旦bean標籤結束,這個對象就會從棧頂拋出,因此在bean標籤外部是訪問不到的。(能夠用debug標籤作測試,在內部能夠看到在外部看不到)

       可是若是在外部想訪問怎麼辦?

       這時候就要使用val屬性,把這個對象放在valueContext裏面

 

        <li>bean 查看debug狀況:
            <s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">
                <s:param name="name" value="'oudy'"></s:param>
            </s:bean>
            拿出值:
            <s:property value="#myDog.name"/>            
        </li>

 

 

 

Include

 

         儘可能少用這個標籤,處理中文特別麻煩。

         Jsp裏面有兩個包含文件的方式,<%   <? ,用這兩種就好,不要用這個標籤

 

        <li>include _include1.html 包含靜態英文文件
            <s:include value="/_include1.html"></s:include>
        </li>
        
        <li>include _include2.html 包含靜態中文文件
            <s:include value="/_include2.html"></s:include>
        </li>
        
        <li>include _include1.html 包含靜態英文文件,說明%用法
            <s:set var="incPage" value="'/_include1.html'" />
            <s:include value="%{#incPage}"></s:include>
        </li>

 

   include的value值就是一個普通字符串,而不是ognl表達式

   在第3個例子中,若是想把incPage從字符串變成ognl表達式

   使用%{}

 

 

if

 

        <li>if else: 
            age = <s:property value="#parameters.age[0]" /> <br />
<s:if test="#parameters.age[0] < 0">wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
<s:else>yeah!</s:else><br />

<s:if test="#parameters.aaa == null">null</s:if>

</li>

 

       注意,每個參數都有多是數組,無論傳過來幾個值,若是想取第一個值,都要加[0]

       valueContext裏的parameters指的是點擊連接帶過來的參數      

<a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>

 

    

        每次都寫#parameters.age[0]太麻煩,這時候就看出來set標籤的好處了

       

        <s:set var="age" value="#parameters.age[0]" />
        <s:if test="#age < 0">wrong age!</s:if>

 

 

 

iterator

 

    就是遍歷,理論上能夠遍歷如下幾種集合

           collections map enumeration iterator array

    ognl表達式裏面大括號就是一個集合,默認會轉化成list

 

 

        <li>遍歷集合:<br />
        <s:iterator value="{1, 2, 3}" >
            <s:property/> |
        </s:iterator>
        </li>
        <li>自定義變量:<br />
        <s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
            <s:property value="#x.toUpperCase()"/> |
        </s:iterator>
        </li>
        <li>使用status:<br />
        <s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
            <s:property/> | 
            遍歷過的元素總數:<s:property value="#status.count"/> |
            遍歷過的元素索引:<s:property value="#status.index"/> |
            當前是偶數?:<s:property value="#status.even"/> |
            當前是奇數?:<s:property value="#status.odd"/> |
            是第一個元素嗎?:<s:property value="#status.first"/> |
            是最後一個元素嗎?:<s:property value="#status.last"/>
            <br />
        </s:iterator>
        
        </li>

 

 

結果是

 

 

Map:

<li>
        <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
            <s:property value="key"/> | <s:property value="value"/> <br />
        </s:iterator>
        </li>
        
        <li>
        <s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
            <s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
        </s:iterator>
        </li>

 

 

 

 

UI

        UI標籤用的並很少

        主要說一個 theme(主題)

        有四種形式

        

           simple     xhtml(默認)      css_xhtml       ajax

       

 

        主題就像頁面皮膚

        當咱們在視圖上寫html源碼時,在客戶端展示出來的是通過處理的,並非原封不動的源碼,不一樣的theme能夠解析成不一樣的結果

         主題有點像抽象工廠,當咱們選擇一種時就換一種皮膚

        咱們能夠配置本身的主題,也能夠在配置文件中換成其餘主題 

相關文章
相關標籤/搜索