<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0
     說明:本文大部分內(nèi)容翻譯自struts-2.0.8-all\struts-2.0.8\docs\docs\using-tags.html,并將struts2的標(biāo)簽作為附錄補(bǔ)充,標(biāo)簽尚有部分未補(bǔ)充完。

     在上篇(Hello World篇)中,我們呈現(xiàn)了一個簡單的歡迎界面。在本篇中,我們將創(chuàng)建鏈接到應(yīng)用其他Action的鏈接。

     Web應(yīng)用程序與傳統(tǒng)的Web站點(diǎn)有所不同,在Web應(yīng)用程序中我們可以創(chuàng)建動態(tài)的返回。為了更容易的在頁面上獲得動態(tài)數(shù)據(jù),本框架提供了一些標(biāo)簽集。其中有些標(biāo)簽?zāi)M了標(biāo)準(zhǔn)的HTML標(biāo)簽,但是提供了一些額外功能。還有一些框架提供了非標(biāo)準(zhǔn)的、但非常有用的控制功能。

     Struts標(biāo)簽的一個使用是創(chuàng)建一個到另外的Web資源的訪問鏈接,特別是到本地的其他資源的鏈接。

    說明:雖然HTML為創(chuàng)建超鏈接提供了簡單的標(biāo)簽,HTML標(biāo)簽常常需要我們包括一些冗余的信息。并且HTML標(biāo)簽不能很容易的得到本框架的動態(tài)數(shù)據(jù)。

    一.             鏈接標(biāo)簽

     Web應(yīng)用程序中的一個常用的功能是鏈接到其他頁面,現(xiàn)在讓我們?yōu)榍懊嬲鹿?jié)的歡迎界面添加到其他Action的鏈接。

    二.             代碼

      

    顯示注冊與登錄的jsp的代碼如下:

    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
        <title>Welcome</title>
        <link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet"
              type="text/css"/>
    </head>
    <body>
    <h3>Commands</h3>
    <ul>
        <li><a href="<s:url action="Register"/>">Register</a></li>
        <li><a href="<s:url action="Logon"/>">Sign On</a></li>
    </ul>
    </body>
    </html>

     運(yùn)行效果如下:

     

     另一個常用的功能是使用鏈接來改變語言,在前章的HelloWorld頁面中,讓我們改變用戶的語言,并根據(jù)對應(yīng)的應(yīng)用程序資源來呈現(xiàn)信息。代碼如下:

    <body>
    <h2><s:property value="message"/></h2>
    <h3>Languages</h3>
    <ul>
        <li>
            <s:url id="url" action="HelloWorld">
                <s:param name="request_locale">en</s:param>
            </s:url>
            <s:a href="%{url}">English</s:a>
        </li>
        <li>
            <s:url id="url" action="HelloWorld">
                <s:param name="request_locale">es</s:param>
            </s:url>
            <s:a href="%{url}">Espanol</s:a>
        </li>
    </ul>
    </body>

     運(yùn)行效果如下:

     

    一.             代碼是如何工作的?

     上述例子中的“%{url}”將會被s:url標(biāo)簽來求得對應(yīng)的值。在WelcomeHelloWorld頁中,我們使用了兩種不同的鏈接標(biāo)簽。我們可以創(chuàng)建如下標(biāo)簽:

    l         資源鏈接

    l         直接的鏈接

    l         帶參數(shù)的鏈接

     下面讓我們分別看一下它們的使用:

    1.       資源鏈接

    首先在jspHEAD元素中,我們使用url標(biāo)簽來將資源引入到頁面中,代碼如下:

    <link href="<s:url value="/css/tutorial.css"/>" 
      rel="stylesheet" type="text/css"/>

    注意:引用時絕對的。我們可以移動該頁面到其他路經(jīng)而不用擔(dān)心相對路徑。

    2.直接鏈接

     我們可以使用鏈接標(biāo)簽來定向到Action,實例代碼如下:

    <li><a href="<s:url action="Register"/>">Register</a></li>

     當(dāng)鏈接運(yùn)作的時候,鏈接標(biāo)簽?zāi)軌蜃詣幼芳诱_的擴(kuò)展,因此我們不需要在應(yīng)用程序中嵌入。這個標(biāo)簽也將會用會話id來編碼鏈接的URL,因此Java的會話在請求之間能夠保持。

    3.帶有參數(shù)的鏈接

     在上述的有關(guān)改變語言的HelloWorld頁中,我們可以使用帶有參數(shù)信息的url標(biāo)簽來創(chuàng)建帶有參數(shù)的鏈接,該段代碼如下:

     <s:url id="url" action="Welcome">
     <s:param name="request_locale">en</s:param>
    </s:url>
    <s:a href="%{url}">English</s:a>

     param標(biāo)簽將會在WelcomeActionurl后增加信息:“?request_locale=en”。這個標(biāo)簽接著將“url”引用注入到超鏈接中。

     說明:通過增加param標(biāo)簽?zāi)軌蛟黾尤我鈹?shù)量的標(biāo)簽。

    二.             通配符映射

     在上述例子的Welcome頁面中,除了鏈接之外尚未添加任何內(nèi)容,我們不需要添加Action類。但是,我們?nèi)匀恍枰砑右粋€映射,以便我們可以使用action URI(如果我們向映射到action,而不是頁面,我們在后面也可以很容易的添加Action類),映射代碼如下:

    <action name="Welcome" >
     <result>/tutorial/Welcome.jsp</result>
    </action>

     當(dāng)我們創(chuàng)建應(yīng)用程序的時候,我們常常需要直接鏈接到頁頁面,為了使原型更加容易,我們可以將Welcome的進(jìn)入改為通配符,修改后的映射如下:

     <action name="*" >
     <result>/tutorial/{1}.jsp</result>
    </action>

     這是代碼是如何工作的呢?

     如果找不到映射,本框架將會做如下工作:

    l         將“Welcome”映射為星號

    l         將“Welcome”代替result中對應(yīng)的“{1}

     同樣的,如果在映射文件中找不到“Login”的映射,將會映射到“/tutorial /Login.jsp”頁面。

     說明:通配符映射能夠使得你能夠創(chuàng)建你自己的規(guī)約,以便你能夠避免冗余的配置。

    三.             數(shù)據(jù)輸入表單

     大多數(shù)應(yīng)用程序都使用一些數(shù)據(jù)進(jìn)入表單。Struts標(biāo)簽使得輸入表單更加容易,代碼如下:

    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
     <title>Login</title>
    </head>
    <body>
    <s:form action="Logon"> 
      <s:textfield label="User Name" name="username"/>
     <s:password label="Password" name="password" />
     <s:submit/>
    </s:form>
    </body>
    </html>

     執(zhí)行效果如下:

     

     代碼是如何工作的呢?

    l         JSP標(biāo)簽在頁面頂部引入了Struts的標(biāo)簽庫

    l         Struts標(biāo)簽:textfield、passwordsubmit,每一個都寫出了正確的Lable和控制類型

    四.             需要記住的東西

     編寫web應(yīng)用程序的最難的一部分是編寫頁面。本框架通過提供一系列的Struts標(biāo)簽使得編寫頁面更加容易。Struts標(biāo)簽?zāi)軌颢@得框架提供的動態(tài)數(shù)據(jù)。標(biāo)簽減少了用來創(chuàng)建頁面所需做的工作。

                                                                                                   附錄一

    ——標(biāo)簽使用指南

    一.             通用標(biāo)簽

     通用標(biāo)簽被用來在頁面執(zhí)行的時候,來控制執(zhí)行流。這些標(biāo)簽同樣允許數(shù)據(jù)不是從Action或者值棧中提取,例如本地化、JavaBeans、包括額外的URLaction執(zhí)行。

    l         控制類標(biāo)簽提供了控制流,例如if,elseiterator

    l         數(shù)據(jù)類標(biāo)簽允許數(shù)據(jù)操作或創(chuàng)建,例如bean、pushi18n

     控制類標(biāo)簽有ifelseIf、 else、appendgenerator、iterator、mergesort、subset。

     數(shù)據(jù)類標(biāo)簽有aaction、bean、date、debug、i18ninclude、param、push、settext、url、property。

     分別介紹如下:

    1.       控制類標(biāo)簽

    1ifelseifelse

    描述:執(zhí)行基本的控制流,if能單獨(dú)使用,也可與else、elseif標(biāo)簽搭配使用。

    參數(shù):

    名稱

    必選

    默認(rèn)值

    求值

    類型

    描述

    id

     

    String

    id用來引用元素。對于UI或者form標(biāo)簽,它的意義等同于HTMLid屬性

    test

     

    Boolean

    用來決定標(biāo)簽體師是否顯示的表達(dá)式

    使用舉例:

    <s:if test="%{false}">
        <div>Will Not Be Executed</div>
    </s:if>
    <s:elseif test="%{true}">
        <div>Will Be Executed</div>
    </s:elseif>
    <s:else>
        <div>Will Not Be Executed</div>
    </s:else>

    2append

    該標(biāo)簽的工作是追加迭代器來,

    例如,如果有三個迭代器(每個迭代器有三個元素)需要追加,下面展示了這個追加迭代器是如何排列的。

       首先是進(jìn)入第一個迭代器的第一個元素;

       第二步是進(jìn)入第一個迭代器的第二個元素;

       第三步是進(jìn)入第一個迭代器的第三個元素;

       第四步是進(jìn)入第二個迭代器的第一個元素;

       第五步是進(jìn)入第二個迭代器的第二個元素;

       第六步是進(jìn)入第二個迭代器的第三個元素;

       第七步是進(jìn)入第三個迭代器的第一個元素;

       第八步是進(jìn)入第三個迭代器的第二個元素;

       第九步是進(jìn)入第三個迭代器的第三個元素。

    參數(shù):

    名稱

    必選

    默認(rèn)值

    求值

    類型

    描述

    id

     

    String

    如果提供了該id的值,將會具有追加迭代器存儲到堆棧上下文中的合成結(jié)果

    使用舉例:

    Action類的代碼:


    public class AppendIteratorTagAction extends ActionSupport {
     
    private List myList1;
     
    private List myList2;
     
    private List myList3;
     
     
     
    public String execute() throws Exception {
         myList1 
    = new ArrayList();
         myList1.add(
    "1");
         myList1.add(
    "2");
         myList1.add(
    "3");
     
         myList2 
    = new ArrayList();
         myList2.add(
    "a");
         myList2.add(
    "b");
         myList2.add(
    "c");
     
         myList3 
    = new ArrayList();
         myList3.add(
    "A");
         myList3.add(
    "B");
         myList3.add(
    "C");
     
         
    return "done";
     }

     
     
    public List getMyList1() return myList1; }
     
    public List getMyList2() return myList2; }
     
    public List getMyList3() return myList3; }

     jsp頁面的代碼:

     <s:append id="myAppendIterator">
         <s:param value="%{myList1}" />
         <s:param value="%{myList2}" />
         <s:param value="%{myList3}" />
    </s:append>
    <s:iterator value="%{#myAppendIterator}">
         <s:property />
    </s:iterator>

     3generator

     描述:創(chuàng)建一個基于提供的值的迭代器。

       注意:產(chǎn)生的迭代器將常常被推入堆棧頂部,而在標(biāo)簽結(jié)束的時候被推出。

     參數(shù):

    名稱

    必選

    默認(rèn)值

    求值

    類型

    描述

    converter

     

    org.apache.struts2.util.IteratorGenerator.Converter

    將從值中分析的字符串轉(zhuǎn)換為一個對象的轉(zhuǎn)換器

    count

     

    Integer

    在迭代器中的最大值

    id

     

    String

    如果提供了id,它將會用來存儲產(chǎn)生的迭代器到頁面上下文

    separator

     

    String

    分隔符用來將迭代器中的值分開

    val

     

    String

    用來解析成迭代器的源

     舉例:

     1:
    <pre>
    例一:
    產(chǎn)生一個簡單的迭代器
    <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">
     <s:iterator>
         <s:property /><br/>
     </s:iterator>
    </s:generator>
    </pre>
    這里產(chǎn)生了一個迭代器,并且使用iterator標(biāo)簽將它打印出來
    例二:
    <pre>
    產(chǎn)生一個帶有count屬性的迭代器
    <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">
     <s:iterator>
         <s:property /><br/>
     </s:iterator>
    </s:generator>
    </pre>
    這里產(chǎn)生了一個迭代器,但是只有其中的三個元素是可用的,這三個分別是aaa、bbbccc
    例三:
    <pre>
    產(chǎn)生一個帶有id屬性的迭代器
    <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" />
    <%
     Iterator i = (Iterator) pageContext.getAttribute("myAtt");
     while(i.hasNext()) {
         String s = (String) i.next(); %>
         <%=s%> <br/>
    <%    }
    %>
    </pre>
    產(chǎn)生了一個迭代器,并且將它存入頁面上下文的指定的idmyAtt)屬性中。
    例四:
    <pre>
    帶有converter屬性的generator標(biāo)簽
    <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}">
     <s:iterator>
         <s:property /><br/>
     </s:iterator>
    </s:generator>
    public class GeneratorTagAction extends ActionSupport {
     ....
     public Converter getMyConverter() {
         return new Converter() {
             public Object convert(String value) throws Exception {
                 return "converter-"+value;
             }
         };
     }
     ...
    }
    </pre>
    產(chǎn)生的這個迭代器,它的每個元素由提供的轉(zhuǎn)換器獲得。在這個轉(zhuǎn)換器中,只是為每個元素增加了“converter-”。
    this converter, it simply add "converter-" to each entries.

     4iterator

     描述:迭代器將會迭代值。一個可迭代的值可以是java.util.Collection,也可以是java.util.Iterator。

     參數(shù):

    名稱

    必選

    默認(rèn)值

    求值

    類型

    描述

    id

     

    String

    id用來引用元素。對于UI和表單標(biāo)簽,它與HTMLid標(biāo)簽相當(dāng)

    status

    Boolean

    如果該值被指定,一個迭代狀態(tài)的實例將會在每一個迭代中被推入堆棧中

    value

     

    String

    用來進(jìn)行迭代的迭代源,否則對象本身將會被放入新的產(chǎn)生的列表中

     舉例:

     下面的例子取回在值棧中的當(dāng)前對象的getDays()所返回的值,<s:property/>標(biāo)簽打印出當(dāng)前迭代器的值,代碼如下:

    <s:iterator value="days">

     <p>day is: <s:property/></p>

    </s:iterator>

       在下面的例子中使用Bean標(biāo)簽并且將它存入ActionContext中。iterator標(biāo)簽將會從ActionContext中取回對象而后調(diào)用它的getDays()方法。狀態(tài)屬性常常用來創(chuàng)建IteratorStatus對象,在這個例子中,它的odd()方法用來改變行的顏色。

    <s:bean name="org.apache.struts2.example.IteratorExample" id="it">
     <s:param name="day" value="'foo'"/>
     <s:param name="day" value="'bar'"/>
    </s:bean>
    <p/>
    <table border="0" cellspacing="0" cellpadding="1">
    <tr>
     <th>Days of the week</th>
    </tr>
    <p/>
    <s:iterator value="#it.days" status="rowstatus">
     <tr>
        <s:if test="#rowstatus.odd == true">
          <td style="background: grey"><s:property/></td>
        </s:if>
        <s:else>
          <td><s:property/></td>
        </s:else>
     </tr>
    </s:iterator>
    </table>

     下個例子將進(jìn)一步展示status屬性的使用,使用通過OGNLaction類取得的DAO,成員的迭代以及它們的使用(在安全的上下文中),last()方法中指明了當(dāng)當(dāng)前的對象是迭代器的最后一個可用的對象,如果不是,我們需要使用逗號來分隔用戶,代碼如下:

    <s:iterator value="groupDao.groups" status="groupStatus">
         <tr class="<s:if test="#groupStatus.odd == true ">odd</s:if><s:else>even</s:else>">
             <td><s:property value="name" /></td>
             <td><s:property value="description" /></td>
             <td>
                 <s:iterator value="users" status="userStatus">
                     <s:property value="fullName" /><s:if test="!#userStatus.last">,</s:if>
                 </s:iterator>
             </td>
         </tr>
     </s:iterator>

     下一個例子在一個action collection上迭代,并且將每一個迭代的值傳給另一個action。這里的訣竅在于使用”[0]”。它獲得當(dāng)前的值并且將值傳入edit action。使用”[0]”與使用<s:property/>具有相同的效果(但是,后者,在param標(biāo)簽內(nèi)部不起作用)。代碼如下所示:

    <s:action name="entries" id="entries"/>
         <s:iterator value="#entries.entries" >
             <s:property value="name" />
             <s:property />
             <s:push value="...">
                 <s:action name="edit" id="edit" >
                     <s:param name="entry" value="[0]" />
                 </s:action>
             </push>
         </s:iterator>

      下例使用iterator標(biāo)簽來模擬一個簡單的循環(huán),循環(huán)了5次,代碼如下:

    <s:iterator status="stat" value="{1,2,3,4,5}" >
       <!—獲得當(dāng)前的index(從0開始) -->
       <s:property value="#stat.index" />
     
       <!— 獲得當(dāng)前堆棧的值 -->
       <!—當(dāng)前的迭代值(0, 1, ... 5) -->
       <s:property value="top" />
    </s:iterator>

    5merge

      描述:它是MergeIterator標(biāo)簽的組件,它的工作是合并迭代器和對合并后的迭代器的后續(xù)調(diào)用,它將使得每一個合并的迭代器有機(jī)會展示它的元素,接著下一個調(diào)用將會允許下一個迭代器來展示它的元素。一旦最后一個迭代器已展示完它的所有元素,第一個迭代器又能夠開始展示它的元素(除非元素已經(jīng)用盡)。

     從內(nèi)部來說,任務(wù)將委托給MergeIteratorFilter去做。

     下面展示了3個列表的合并,其中每個列表有3個元素,步驟如下:

    1. 展示第一個列表的第一個元素;

    2. 展示第二個列表的第一個元素;

    3. 展示第三個列表的第一個元素;

    4. 展示第一個列表的第二個元素;

    5. 展示第二個列表的第二個元素;

    6. 展示第三個列表的第二個元素;

    7. 展示第一個列表的第三個元素;

    8. 展示第二個列表的第三個元素;

    9. 展示第三個列表的第三個元素;

     參數(shù):

    名稱

    必選

    默認(rèn)值

    求值

    類型

    描述

    id

     

    String

    合并后的迭代器的值將會存儲在堆棧上下文的id

     舉例:

     Action類代碼:

    public class MergeIteratorTagAction extends ActionSupport {
     
     private List myList1;
     private List myList2;
     private List myList3;
     
     public List getMyList1() {
         return myList1;
     }
     
     public List getMyList2() {
         return myList2;
     }
     
     public List getMyList3() {
         return myList3;
     }
     
     
     public String execute() throws Exception {
     
         myList1 = new ArrayList();
         myList1.add("1");
         myList1.add("2");
         myList1.add("3");
     
         myList2 = new ArrayList();
         myList2.add("a");
         myList2.add("b");
         myList2.add("c");
     
         myList3 = new ArrayList();
         myList3.add("A");
         myList3.add("B");
         myList3.add("C");
     
         return "done";
     }
    }

     jsp頁代碼:

    <s:merge id="myMergedIterator1">
         <s:param value="%{myList1}" />
         <s:param value="%{myList2}" />
         <s:param value="%{myList3}" />
    </s:merge>
    <s:iterator value="%{#myMergedIterator1}">
         <s:property />
    </s:iterator>

     

    二.             UI標(biāo)簽

     

    三.             主題與模板標(biāo)簽

     

    四.             標(biāo)簽引用

     

    五.             Ajax標(biāo)簽

     

    六.             標(biāo)簽語法

      標(biāo)簽被設(shè)計用來顯示動態(tài)的數(shù)據(jù)。為了創(chuàng)建輸入域來顯示屬性“postalCode”,我們需要將“postalCode”傳給textfield標(biāo)簽。

      下面創(chuàng)建了一個動態(tài)的輸入域:

     <s:textfield name="postalCode"/>

       如果在值棧中存在“postalCode”屬性,它的值將會被放入該輸入域中。當(dāng)輸入被提交到框架之后,它的值將會被放置到“postalCode”屬性中。

       有時候,我們想要傳動態(tài)的數(shù)據(jù)到標(biāo)簽中。例如,我們可能需要用輸入域來顯示一個label,我們可能想要從應(yīng)用程序的message資源中。相應(yīng)地,框架將會解析在標(biāo)簽屬性中的表達(dá)式。因此在運(yùn)行時我們能夠合并動態(tài)的數(shù)據(jù)到標(biāo)簽的屬性中。表達(dá)式是像“%{…}”這樣的。任何一個在其中嵌入的文本被作為表達(dá)式來計算。

       使用一個表達(dá)式來設(shè)置label的例子:

    <s:textfield key="postalCode.label" name="postalCode"/>

       表達(dá)式語言(OGNL)使得我們能夠調(diào)用方法和計算屬性。getText()方法由ActionSupport(大多數(shù)Action的基類)提供。我們可以調(diào)用任何一個表達(dá)式提供的方法,包括getText方法。

     String型的屬性

       HTTP協(xié)議是基于文本的,但是有一些標(biāo)簽時非String類型的,例如boolint。為了能夠直接使用非String型的屬性,本框架將所有的非String類型的屬性作為一個表達(dá)式處理,在這種情況下,你不需要使用任何轉(zhuǎn)義符(但是,如果你使用了轉(zhuǎn)義符,框架也會將其跳過)。

       計算boolean型的例子:

    <s:select key="state.label" name="state" multiple="true"/>

       一旦multiple屬性跟一個boolean屬性對應(yīng)起來,框架不會將它作為一個String來解釋,這個值將會被作為一個表達(dá)式來計算并且自動地將其轉(zhuǎn)換為boolean值。

       因為很容易忘記哪個屬性是String,哪個屬性是非String型的,你仍然可以使用轉(zhuǎn)義符。

       計算boolean值(帶有轉(zhuǎn)義符的):

     <s:select key="state.label" name="state" multiple="%{true}"/>

      帶有屬性的:

     <s:select key="state.label" name="state" multiple="allowMultiple"/>

     既帶有轉(zhuǎn)義符又帶有屬性的:

     <s:select key="state.label" name="state" multiple="%{allowMultiple}"/>

     

      值是一個對象

       更通常的情況是,屬性值是自動放入的,因為name屬性通常告訴框架哪個屬性來調(diào)用方法來set值。但是,如果需要直接設(shè)置值,建議那個值是Object型而不是String型。

       注意:因為值是非String型的,無論傳入什么,都是將他作為表達(dá)式來處理——而不是一個字面的String

       可能導(dǎo)致錯誤的例子:

     <s:textfield key="state.label" name="state" value="CA"/>

       如果textfield被傳入 CA”,本框架將會名字為getCa的屬性。通常情況下,這不是我們的本意,我們想要做的是傳送一個字符串。在表達(dá)式語言中,文字需要被置為單引號之間。

       以正確的方式傳入一個文字值:

    <s:textfield key="state.label" name="state" value="%{'CA'}" />

       另一種方法是使用value=”’CA’”,但是在這種情況下,推薦使用表達(dá)式符號。

       標(biāo)簽屬性使用如下三種規(guī)則計算:

      1.    所有的String屬性都被解析成“%{…}”符號;

      2.    所有的非String屬性沒有被解析,而是直接按照表達(dá)式來算;

      3.    規(guī)則2的異常情況是非String型的屬性使用轉(zhuǎn)義符號“{%{}”,符號被作為多余的符號被忽略,而只是計算內(nèi)容。

    表示式語言符號

      1.在Freemarker、Velocity或者JSTL的表達(dá)式語言的JavaBean對象的標(biāo)準(zhǔn)文本

     <p>Username: ${user.username}</p>

      2.在值棧中的一個username屬性

     <s:textfield name="username"/>

      3. 引用值棧中的屬性的另一種方式

     <s:url id="es" action="Hello">
     <s:param name="request_locale">
        es
     </s:param>
    </s:url>
    <s:a href="%{es}">Espanol</s:a>

      4. Session Context中獲得user對象的userName屬性

     <s:property name="#session.user.username" />

      5. 在一個靜態(tài)map中,像("username","trillian")一樣

      <s:select label="FooBar" name="foo" list="#{'username':'trillian', 'username':'zaphod'}" />

      下一篇:編寫Action

    上一篇:HelloWorld

    posted on 2007-07-29 10:10 阿蜜果 閱讀(16484) 評論(7)  編輯  收藏 所屬分類: Struts2


    FeedBack:
    # re: Struts2學(xué)習(xí)進(jìn)階(三)——使用Struts2的標(biāo)簽
    2007-07-29 10:57 | paul
    寫的不錯,最近正在看s2,還是有點(diǎn)不明白,在讀取值時 什么時候該用
    %,什么時候用#,
    例如文章中的這一句;<s:iterator value="%{#myAppendIterator}">
    <s:property />
    value中該如何寫?現(xiàn)在還不清楚,請賜教

    qq:157184362
    msn:e3002@163.com

      回復(fù)  更多評論
      
    # re: Struts2學(xué)習(xí)進(jìn)階(三)——使用Struts2的標(biāo)簽[未登錄]
    2007-07-29 22:44 | lf
    還有其他的標(biāo)簽什么時候講?  回復(fù)  更多評論
      
    # re: Struts2學(xué)習(xí)進(jìn)階(三)——使用Struts2的標(biāo)簽[未登錄]
    2007-07-30 10:59 | 阿蜜果
    @lf
    其他標(biāo)簽這周之內(nèi)會補(bǔ)充完的
    多謝關(guān)注  回復(fù)  更多評論
      
    # re: Struts2學(xué)習(xí)進(jìn)階(基礎(chǔ)篇三)——使用Struts2的標(biāo)簽
    2007-08-05 23:42 | yangxiang
    關(guān)于通配符那看原版的沒弄明白,看了這篇文章終于搞懂了,多謝!  回復(fù)  更多評論
      
    # re: Struts2學(xué)習(xí)進(jìn)階(基礎(chǔ)篇三)——使用Struts2的標(biāo)簽[未登錄]
    2009-08-19 17:43 | aaa
    暈,為什么不能另存為??  回復(fù)  更多評論
      
    # re: Struts2學(xué)習(xí)進(jìn)階(基礎(chǔ)篇三)——使用Struts2的標(biāo)簽[未登錄]
    2010-11-29 16:25 | 123
    如何用struts2標(biāo)簽在jsp頁面中取得list的第一個元素?  回復(fù)  更多評論
      
    # re: Struts2學(xué)習(xí)進(jìn)階(基礎(chǔ)篇三)——使用Struts2的標(biāo)簽
    2011-06-24 11:38 | 11
    一個讀取堆里邊的值 一個讀取棧里邊的值  回復(fù)  更多評論
      
    <2007年7月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

          生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
          我的作品:
          玩轉(zhuǎn)Axure RP  (2015年12月出版)
          

          Power Designer系統(tǒng)分析與建模實戰(zhàn)  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關(guān)注blog

    積分與排名

    • 積分 - 2294306
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品成a人在线观看☆| 日本亚洲欧美色视频在线播放| 啦啦啦中文在线观看电视剧免费版 | 狠狠色伊人亚洲综合成人| 国产精品视_精品国产免费 | 亚洲欧美日韩自偷自拍| 内射干少妇亚洲69XXX| 亚洲国产精品无码AAA片| 少妇亚洲免费精品| 在线日韩av永久免费观看| 最近中文字幕无吗免费高清| 1000部拍拍拍18免费网站| 五月天国产成人AV免费观看| 又大又硬又粗又黄的视频免费看| 亚洲国产精品成人AV在线| 亚洲不卡在线观看| 亚洲精品美女久久久久久久| 亚洲国产精品99久久久久久| 亚洲精品国产高清在线观看| 亚洲国产午夜精品理论片在线播放| 亚洲欧美日韩国产精品一区| 亚洲s码欧洲m码吹潮| 自拍偷自拍亚洲精品播放| 好猛好深好爽好硬免费视频| 9久热这里只有精品免费| 九九美女网站免费| www.免费在线观看| 免费人成视网站在线观看不卡| 国产精品亚洲综合专区片高清久久久| 亚洲熟妇中文字幕五十中出| 亚洲国产综合专区电影在线| avtt天堂网手机版亚洲| 一个人看的hd免费视频| 91精品国产免费久久国语蜜臀 | 国产精品成人免费观看| 日本免费网站视频www区| www国产亚洲精品久久久| 亚洲精品熟女国产| 国产精品成人啪精品视频免费| 91久久青青草原线免费| 国产免费怕怕免费视频观看|