隨筆 - 4, 文章 - 0, 評論 - 0, 引用 - 0

          導航

          <2009年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          常用的Struts 2.0的標志(Tag)介紹(轉)

          在上一篇文章《為Struts 2.0做好準備》中,我過于詳細地介紹了Struts 2.0開發環境和運行環境的配置,所以,本文很少涉及的以上兩方面的細節。如果,您看完《為Struts 2.0做好準備》后,還有什么不明白,或者沒法運行文中例子,請聯系我。我的E-MAIL:Max.M.Yuan@gmail.com。

          在介紹常用標志前,我想先從總體上,對Struts 1.x與Struts 2.0的標志庫(Tag Library)作比較。

          ? Struts 1.x Struts 2.0
          分類 將標志庫按功能分成HTML、Tiles、Logic和Bean等幾部分 嚴格上來說,沒有分類,所有標志都在URI為“/struts-tags”命名空間下,不過,我們可以從功能上將其分為兩大類:非UI標志和UI標志
          表達式語言(expression languages) 不支持嵌入語言(EL) OGNL、JSTL、Groovy和Velcity
          以上表格,純屬個人總結,如有所不足或錯誤,請不吝指正

          好了,我要開始介紹“常用”(這里所謂的“常用”,是指在已往工作中使用Struts里經常用到的)的標志了。

          要在JSP中使用Struts 2.0標志,先要指明標志的引入。通過在JSP的代碼的頂部加入以下代碼可以做到這點。
          <%@taglib prefix="s" uri="/struts-tags" %>
          1. 非UI標志
            • if、elseif和else

              描述:
              執行基本的條件流轉。

              參數:

              名稱必需默認類型描述備注
              testBoolean決定標志里內容是否顯示的表達式else標志沒有這個參數
              idObject/String用來標識元素的id。在UI和表單中為HTML的id屬性

              例子:

              <%@?page?contentType="text/html;?charset=UTF-8"?%>
              <%@?taglib?prefix="s"?uri="/struts-tags"?%>
              <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
              <html>
              ????
              <head>
              ????????
              <title>Condition?Flow</title>
              ????
              </head>
              ????
              <body>
              ????????
              <h3>Condition?Flow</h3>????????????
              ????????
              <!--
              ????????????這里有點小技巧:
              ????????????本來可以用#parameters.name[0]來獲得,請求中name的值。但是,在我實現include例子時,
              ????????????無論我用param標志給name賦任何值,#parameters里面不會含有任何值,所以#parameters.name也為空值。
              ????????????
              ????????????其原因為:
              ????????????當使用include標志時,被包含的頁面(included)里#parameters拿到的是包含頁面里的請求參數。
              ????????????
              ????????????因此,這里必須手工調用request.getParameter("name")。
              ????????
              -->
              ????????
              <s:set?name="name"?value="<%=?"'"?+?request.getParameter("name")?+?"'"?%>"?/>
              ????????
              <s:if?test="#name?==?'Max'">
              ????????????Max's?file?here
              ????????
              </s:if>
              ????????
              <s:elseif?test="#name?==?'Scott'">
              ????????????Scott's?file?here
              ????????
              </s:elseif>
              ????????
              <s:else>
              ????????????Other's?file?here
              ????????
              </s:else>????????
              ????
              </body>
              </html>
              例1 condition.jsp

            • iterator

              描述:
              用于遍歷集合(java.util.Collection)或枚舉值(java.util.Iterator)。

              參數:

              名稱必需默認類型描述
              statusString如果設置此參數,一個IteratorStatus的實例將會壓入每個遍歷的堆棧
              valueObject/String要遍歷的可枚舉的(iteratable)數據源,或者將放入新列表(List)的對象
              idObject/String用來標識元素的id。在UI和表單中為HTML的id屬性

              例子:

              <%@?page?contentType="text/html;?charset=UTF-8"?%>
              <%@?page?import="java.util.List"?%>
              <%@?page?import="java.util.ArrayList"?%>
              <%@?taglib?prefix="s"?uri="/struts-tags"?%>

              <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
              <%
              ????List?list?
              =?new?ArrayList();
              ????list.add(
              "Max");
              ????list.add(
              "Scott");
              ????list.add(
              "Jeffry");
              ????list.add(
              "Joe");
              ????list.add(
              "Kelvin");
              ????request.setAttribute(
              "names",?list);
              %>
              <html>
              ????
              <head>
              ????????
              <title>Iterator</title>
              ????
              </head>
              ????
              <body>
              ????????
              <h3>Names:?</h3>
              ????????
              <!--?
              ????????????1、此處的空property元素用于獲得當前iterator的值?
              ????????????2、status被設成stuts,在iterator的里面就可以通過#stuts取得IteratorStatus的對象。IteratorStatus類包含當前序號信息,如是否第一個或最后一個,是否為奇數序號。這些信息在我們做格式化的時候,顯得非常有用。
              ????????
              -->
              ????????
              <ol>
              ????????????
              <s:iterator?value="#request.names"?status="stuts">????????????????
              ????????????????
              <s:if?test="#stuts.odd?==?true">
              ????????????????????
              <li>White?<s:property?/></li>
              ????????????????
              </s:if>
              ????????????????
              <s:else>
              ????????????????????
              <li?style="background-color:gray"><s:property?/></li>
              ????????????????
              </s:else>
              ????????????
              </s:iterator>
              ????????
              </ol>
              ????
              </body>
              </html>
              例2 iterator.jsp

            • i18n

              描述:
              加載資源包到值堆棧。它可以允許text標志訪問任何資源包的信息,而不只當前action相關聯的資源包。

              參數:

              名稱必需默認類型描述
              valueObject/String資源包的類路徑(如com.xxxx.resources.AppMsg)
              idObject/String用來標識元素的id。在UI和表單中為HTML的id屬性

              例子:

              HelloWorld=Hello?Wrold!
              例3 classes\ ApplicationMessages.properties

              <%@?page?contentType="text/html;?charset=UTF-8"?%>
              <%@?taglib?prefix="s"?uri="/struts-tags"?%>

              <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
              <html>
              ????
              <head>
              ????????
              <title>Internationization</title>
              ????
              </head>
              ????
              <body>
              ????????
              <h3>
              ????????????
              <s:i18n?name="ApplicationMessages">
              ????????????????
              <s:text?name="HelloWorld"?/>
              ????????????
              </s:i18n>
              ????????
              </h3>
              ????
              </body>
              </html>
              例3 i18n.jsp

            • include

              描述:
              包含一個servlet的輸出(servlet或jsp的頁面)。

              參數:

              名稱必需默認類型描述
              valueString要包含的jsp或servlet
              idObject/String用來標識元素的id。在UI和表單中為HTML的id屬性

              例子:

              <%@?page?contentType="text/html;?charset=UTF-8"?%>
              <%@?taglib?prefix="s"?uri="/struts-tags"?%>

              <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
              <html>
              ????
              <head>
              ????????
              <title>Iterator</title>
              ????
              </head>
              ????
              <body>
              ????????
              <h3>Interator?Page</h3>
              ????????
              <s:include?value="/condition.jsp">
              ????????????
              <s:param?name="name">Max</s:param>
              ????????
              </s:include>
              ????????
              <h3>i18n</h3>
              ????????
              <s:include?value="/i18n.jsp"?/>
              ????
              </body>
              </html>
              例4 include.jsp

            • param

              描述:
              為其他標簽提供參數,比如include標簽和bean標簽. 參數的name屬性是可選的,如果提供,會調用Component的方法addParameter(String, Object), 如果不提供,則外層嵌套標簽必須實現UnnamedParametric接口(如TextTag)。

              value的提供有兩種方式,通過value屬性或者標簽中間的text,不同之處我們看一下例子:

              <param name="color">blue</param><!-- (A) -->

              <param name="color" value="blue"/><!-- (B) -->
              (A)參數值會以String的格式放入statck.
              (B)該值會以java.lang.Object的格式放入statck.

              參數:

              名稱必需默認類型描述
              nameString參數名
              valueStringvalue表達式
              idObject/String用來標識元素的id。在UI和表單中為HTML的id屬性

              例子:
              請參考例4。

            • set

              描述:
              set標簽賦予變量一個特定范圍內的值。當希望給一個變量賦一個復雜的表達式,每次訪問該變量而不是復雜的表達式時用到。其在兩種情況下非常有用: 復雜的表達式很耗時 (性能提升) 或者很難理解 (代碼可讀性提高)。

              參數:

              名稱必需默認類型描述
              nameString變量名字
              scopeString變量作用域,可以為application, session, request, page, 或action.
              valueObject/String將會賦給變量的值
              idObject/String用來標識元素的id。在UI和表單中為HTML的id屬性

              例子:
              請參考例1。

            • text

              描述:
              支持國際化信息的標簽。國際化信息必須放在一個和當前action同名的resource bundle中,如果沒有找到相應message,tag body將被當作默認message,如果沒有tag body,message的name會被作為默認message。

              參數:

              名稱必需默認類型描述
              nameString資源屬性的名字
              idObject/String用來標識元素的id。在UI和表單中為HTML的id屬性

              例子:
              請參考例3。

            • url

              描述:
              該標簽用于創建url,可以通過"param"標簽提供request參數。

              當includeParams的值時'all'或者'get', param標簽中定義的參數將有優先權,也就是說其會覆蓋其他同名參數的值。

              參數: 略

              例子:

              <%@?page?contentType="text/html;?charset=UTF-8"?%>
              <%@?taglib?prefix="s"?uri="/struts-tags"?%>
              <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
              <html>
              ????
              <head>
              ????????
              <title>URL</title>
              ????
              </head>
              ????
              <body>
              ????????
              <h3>URL</h3>????????????
              ????????
              <a?href='<s:url?value="/i18n.jsp"?/>'>i18n</a><br?/>
              ????????
              <s:url?id="url"?value="/condition.jsp">
              ????????????
              <s:param?name="name">Max</s:param>
              ????????
              </s:url>????????
              ????????
              <s:a?href="%{url}">if\elseif\else</s:a>
              ????
              </body>
              </html>
              例5 url.jsp

            • property

              描述:
              得到'value'的屬性,如果value沒提供,默認為堆棧頂端的元素。

              參數:

              名稱必需默認類型描述
              defaultString如果屬性是null則顯示的default值
              escapetrueBooelean是否escape HTML
              value棧頂Object要顯示的值
              idObject/String用來標識元素的id。在UI和表單中為HTML的id屬性

              例子:
              請參考例2。

          2. UI標志

            UI標志又可以分為表單UI和非表單UI兩部分。表單UI部分基本與Struts 1.x相同,都是對HTML表單元素的包裝。不過,Struts 2.0加了幾個我們經常在項目中用到的控件如:datepicker、doubleselect、timepicker、optiontransferselect等。因為這些標志很多都經常用到,而且參數也很多,要在一篇文章詳細說明并非易事。

            需要深入了解這些標志的朋友,可以到以下查看以下網址:
            http://wiki.javascud.org/display/ww2cndoc/Tags WebWork2文檔中文化計劃(中文)
            http://cwiki.apache.org/WW/tag-reference.html Tag Developers Guide(英文)
            本文有相當的內容也來自這兩處。

            在此,我雖然不能夠詳細講述這些標志,但是可以與大家分享一個來Struts 2.0 Show Case一個例子。

            /*
            ?*?$Id:?UITagExample.java?420385?2006-07-10?00:57:05Z?mrdon?$
            ?*
            ?*?Copyright?2006?The?Apache?Software?Foundation.
            ?*
            ?*?Licensed?under?the?Apache?License,?Version?2.0?(the?"License");
            ?*?you?may?not?use?this?file?except?in?compliance?with?the?License.
            ?*?You?may?obtain?a?copy?of?the?License?at
            ?*
            ?*??????
            http://www.apache.org/licenses/LICENSE-2.0
            ?*
            ?*?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software
            ?*?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,
            ?*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.
            ?*?See?the?License?for?the?specific?language?governing?permissions?and
            ?*?limitations?under?the?License.
            ?
            */

            package?org.apache.struts2.showcase;

            import?org.apache.struts2.ServletActionContext;
            import?com.opensymphony.xwork2.ActionSupport;
            import?com.opensymphony.xwork2.Validateable;
            import?com.opensymphony.xwork2.util.OgnlValueStack;

            import?java.util.ArrayList;
            import?java.util.Collections;
            import?java.util.Date;
            import?java.util.HashMap;
            import?java.util.List;
            import?java.util.Map;
            import?java.io.File;

            /**
            ?
            */

            public?class?UITagExample?extends?ActionSupport?implements?Validateable?{
            ????
            ????
            private?static?final?long?serialVersionUID?=?-94044809860988047L;????????
            ????String?name;
            ????Date?birthday;
            ????String?bio;
            ????String?favoriteColor;
            ????List?friends;
            ????
            boolean?legalAge;
            ????String?state;
            ????String?region;
            ????File?picture;
            ????String?pictureContentType;
            ????String?pictureFileName;
            ????String?favouriteLanguage;
            ????String?favouriteVehicalType?
            =?"MotorcycleKey";
            ????String?favouriteVehicalSpecific?
            =?"YamahaKey";
            ????
            ????List?leftSideCartoonCharacters;
            ????List?rightSideCartoonCharacters;
            ????
            ????List?favouriteLanguages?
            =?new?ArrayList();
            ????List?vehicalTypeList?
            =?new?ArrayList();
            ????Map?vehicalSpecificMap?
            =?new?HashMap();
            ????
            ????String?thoughts;
            ????
            ????
            public?UITagExample()?{
            ????????favouriteLanguages.add(
            new?Language("EnglishKey",?"English?Language"));
            ????????favouriteLanguages.add(
            new?Language("FrenchKey",?"French?Language"));
            ????????favouriteLanguages.add(
            new?Language("SpanishKey",?"Spanish?Language"));
            ????????
            ????????VehicalType?car?
            =?new?VehicalType("CarKey",?"Car");
            ????????VehicalType?motorcycle?
            =?new?VehicalType("MotorcycleKey",?"Motorcycle");
            ????????vehicalTypeList.add(car);
            ????????vehicalTypeList.add(motorcycle);
            ????????
            ????????List?cars?
            =?new?ArrayList();
            ????????cars.add(
            new?VehicalSpecific("MercedesKey",?"Mercedes"));
            ????????cars.add(
            new?VehicalSpecific("HondaKey",?"Honda"));
            ????????cars.add(
            new?VehicalSpecific("FordKey",?"Ford"));
            ????????
            ????????List?motorcycles?
            =?new?ArrayList();
            ????????motorcycles.add(
            new?VehicalSpecific("SuzukiKey",?"Suzuki"));
            ????????motorcycles.add(
            new?VehicalSpecific("YamahaKey",?"Yamaha"));
            ????????
            ????????vehicalSpecificMap.put(car,?cars);
            ????????vehicalSpecificMap.put(motorcycle,?motorcycles);
            ????}
            ???
            ????????
            ????
            public?List?getLeftSideCartoonCharacters()?{
            ????????
            return?leftSideCartoonCharacters;
            ????}

            ????
            public?void?setLeftSideCartoonCharacters(List?leftSideCartoonCharacters)?{
            ????????
            this.leftSideCartoonCharacters?=?leftSideCartoonCharacters;
            ????}

            ????????
            ????
            public?List?getRightSideCartoonCharacters()?{
            ????????
            return?rightSideCartoonCharacters;
            ????}

            ????
            public?void?setRightSideCartoonCharacters(List?rightSideCartoonCharacters)?{
            ????????
            this.rightSideCartoonCharacters?=?rightSideCartoonCharacters;
            ????}

            ????????
            ????
            public?String?getFavouriteVehicalType()?{
            ????????
            return?favouriteVehicalType;
            ????}

            ????
            ????
            public?void?setFavouriteVehicalType(String?favouriteVehicalType)?{
            ????????
            this.favouriteVehicalType?=?favouriteVehicalType;
            ????}

            ????
            ????
            public?String?getFavouriteVehicalSpecific()?{
            ????????
            return?favouriteVehicalSpecific;
            ????}

            ????
            ????
            public?void?setFavouriteVehicalSpecific(String?favouriteVehicalSpecific)?{
            ????????
            this.favouriteVehicalSpecific?=?favouriteVehicalSpecific;
            ????}

            ????
            ????
            public?List?getVehicalTypeList()?{
            ????????
            return?vehicalTypeList;
            ????}

            ????
            ????
            public?List?getVehicalSpecificList()?{
            ????????OgnlValueStack?stack?
            =?ServletActionContext.getValueStack(ServletActionContext.getRequest());
            ????????Object?vehicalType?
            =?stack.findValue("top");
            ????????
            if?(vehicalType?!=?null?&&?vehicalType?instanceof?VehicalType)?{
            ????????????List?l?
            =?(List)?vehicalSpecificMap.get(vehicalType);
            ????????????
            return?l;
            ????????}

            ????????
            return?Collections.EMPTY_LIST;
            ????}

            ????
            ????
            public?List?getFavouriteLanguages()?{
            ????????
            return?favouriteLanguages;
            ????}


            ????
            public?String?execute()?throws?Exception?{
            ????????
            return?SUCCESS;
            ????}


            ????
            /*?Getters?and?Setters?*/
            ???????????
            ????
            public?String?doSubmit()?{
            ????????
            return?SUCCESS;
            ????}
            ???????
            ????
            ????
            //?===?inner?class?
            ????public?static?class?Language?{
            ????????String?description;
            ????????String?key;
            ????????
            ????????
            public?Language(String?key,?String?description)?{
            ????????????
            this.key?=?key;
            ????????????
            this.description?=?description;
            ????????}

            ????????
            ????????
            public?String?getKey()?{?
            ????????????
            return?key;?
            ????????}

            ????????
            public?String?getDescription()?{?
            ????????????
            return?description;?
            ????????}

            ????????
            ????}
            ????
            ????
            ????
            public?static?class?VehicalType?{
            ????????String?key;
            ????????String?description;
            ????????
            public?VehicalType(String?key,?String?description)?{
            ????????????
            this.key?=?key;
            ????????????
            this.description?=?description;
            ????????}

            ????????
            ????????
            public?String?getKey()?{?return?this.key;?}
            ????????
            public?String?getDescription()?{?return?this.description;?}
            ????????
            ????????
            public?boolean?equals(Object?obj)?{
            ????????????
            if?(!?(obj?instanceof?VehicalType))?{?
            ????????????????
            return?false;
            ????????????}

            ????????????
            else?{
            ????????????????
            return?key.equals(((VehicalType)obj).getKey());
            ????????????}

            ????????}

            ????????
            ????????
            public?int?hashCode()?{
            ????????????
            return?key.hashCode();
            ????????}

            ????}
            ????
            ????
            ????
            public?static?class?VehicalSpecific?{
            ????????String?key;?
            ????????String?description;
            ????????
            public?VehicalSpecific(String?key,?String?description)?{
            ????????????
            this.key?=?key;
            ????????????
            this.description?=?description;
            ????????}

            ????????
            ????????
            public?String?getKey()?{?return?this.key;?}
            ????????
            public?String?getDescription()?{?return?this.description;?}
            ????????
            ????????
            public?boolean?equals(Object?obj)?{
            ????????????
            if?(!?(obj?instanceof?VehicalSpecific))?{
            ????????????????
            return?false;
            ????????????}

            ????????????
            else?{
            ????????????????
            return?key.equals(((VehicalSpecific)obj).getKey());
            ????????????}

            ????????}

            ????????
            ????????
            public?int?hashCode()?{
            ????????????
            return?key.hashCode();
            ????????}

            ????}

            }
            例6 org.apache.struts2.showcase.UITagExample.java

            <%@?page?contentType="text/html;?charset=UTF-8"?pageEncoding="UTF-8"?%>
            <%@?taglib?prefix="s"?uri="/struts-tags"?%>
            <html>
            <head>
            ????
            <title>UI?Tags?Example</title>
            ????
            <s:head/>
            </head>
            <body>

            <s:actionerror/>
            <s:actionmessage/>
            <s:fielderror?/>

            <s:form?action="exampleSubmit"?method="post"?enctype="multipart/form-data"?tooltipConfig="#{'jsTooltipEnabled':'true'}">
            ????
            <s:textfield?
            ????????????
            label="Name"?
            ????????????name
            ="name"
            ????????????tooltip
            ="Enter?your?Name?here"?/>

            ????
            <s:datepicker
            ????????????
            tooltip="Select?Your?Birthday"
            ????????????label
            ="Birthday"
            ????????????name
            ="birthday"?/>

            ????
            <s:textarea
            ????????????
            tooltip="Enter?your?Biography"
            ????????????label
            ="Biograph"
            ????????????name
            ="bio"
            ????????????cols
            ="20"
            ????????????rows
            ="3"/>

            ????
            <s:select
            ????????????
            tooltip="Choose?Your?Favourite?Color"
            ????????????label
            ="Favorite?Color"
            ????????????list
            ="{'Red',?'Blue',?'Green'}"
            ????????????name
            ="favoriteColor"
            ????????????emptyOption
            ="true"
            ????????????headerKey
            ="None"
            ????????????headerValue
            ="None"/>

            ????
            <s:select
            ????????????
            tooltip="Choose?Your?Favourite?Language"
            ????????????label
            ="Favourite?Language"
            ????????????list
            ="favouriteLanguages"
            ????????????name
            ="favouriteLanguage"
            ????????????listKey
            ="key"
            ????????????listValue
            ="description"
            ????????????emptyOption
            ="true"
            ????????????headerKey
            ="None"
            ????????????headerValue
            ="None"/>

            ????
            <s:checkboxlist
            ????????????
            tooltip="Choose?your?Friends"
            ????????????label
            ="Friends"
            ????????????list
            ="{'Patrick',?'Jason',?'Jay',?'Toby',?'Rene'}"
            ????????????name
            ="friends"/>

            ????
            <s:checkbox
            ????????????
            tooltip="Confirmed?that?your?are?Over?18"
            ????????????label
            ="Age?18+"
            ????????????name
            ="legalAge"/>

            ????
            <s:doubleselect
            ????????????
            tooltip="Choose?Your?State"
            ????????????label
            ="State"
            ????????????name
            ="region"?list="{'North',?'South'}"
            ????????????value
            ="'South'"
            ????????????doubleValue
            ="'Florida'"
            ????????????doubleList
            ="top?==?'North'???{'Oregon',?'Washington'}?:?{'Texas',?'Florida'}"?
            ????????????doubleName
            ="state"
            ????????????headerKey
            ="-1"
            ????????????headerValue
            ="----------?Please?Select?----------"
            ????????????emptyOption
            ="true"?/>

            ????
            <s:doubleselect
            ????????????
            tooltip="Choose?your?Vehical"
            ????????????label
            ="Favourite?Vehical"
            ????????????name
            ="favouriteVehicalType"
            ????????????list
            ="vehicalTypeList"
            ????????????listKey
            ="key"
            ????????????listValue
            ="description"
            ????????????value
            ="'MotorcycleKey'"
            ????????????doubleValue
            ="'YamahaKey'"
            ????????????doubleList
            ="vehicalSpecificList"
            ????????????doubleListKey
            ="key"
            ????????????doubleListValue
            ="description"
            ????????????doubleName
            ="favouriteVehicalSpecific"?headerKey="-1"
            ????????????headerValue
            ="----------?Please?Select?----------"
            ????????????emptyOption
            ="true"?/>

            ????
            <s:file
            ????????????
            tooltip="Upload?Your?Picture"
            ????????????label
            ="Picture"?
            ????????????name
            ="picture"?/>
            ????????????
            ????
            <s:optiontransferselect
            ????????????
            tooltip="Select?Your?Favourite?Cartoon?Characters"
            ????????????label
            ="Favourite?Cartoons?Characters"
            ????????????name
            ="leftSideCartoonCharacters"?
            ????????????leftTitle
            ="Left?Title"
            ????????????rightTitle
            ="Right?Title"
            ????????????list
            ="{'Popeye',?'He-Man',?'Spiderman'}"?
            ????????????multiple
            ="true"
            ????????????headerKey
            ="headerKey"
            ????????????headerValue
            ="---?Please?Select?---"
            ????????????emptyOption
            ="true"
            ????????????doubleList
            ="{'Superman',?'Mickey?Mouse',?'Donald?Duck'}"?
            ????????????doubleName
            ="rightSideCartoonCharacters"
            ????????????doubleHeaderKey
            ="doubleHeaderKey"
            ????????????doubleHeaderValue
            ="---?Please?Select?---"?
            ????????????doubleEmptyOption
            ="true"
            ????????????doubleMultiple
            ="true"?/>
            ????
            ????
            <s:textarea
            ????????????
            label="Your?Thougths"
            ????????????name
            ="thoughts"?
            ????????????tooltip
            ="Enter?your?thoughts?here"?/>
            ????????????
            ????
            <s:submit?onclick="alert('aaaa');"?/>
            ????
            <s:reset?onclick="alert('bbbb');"?/>
            </s:form>
            ????
            </body>
            </html>
            例6 example.jsp

            <action?name="example"?class="org.apache.struts2.showcase.UITagExample">
            ????
            <result>example.jsp</result>
            ????
            <result?name="input">example.jsp</result>
            </action>

          posted on 2009-08-20 14:43 david hu 閱讀(140) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 延庆县| 古蔺县| 新邵县| 固始县| 雷州市| 理塘县| 阿城市| 霍林郭勒市| 辉南县| 古丈县| 富蕴县| 淮南市| 重庆市| 襄城县| 大同市| 长沙市| 宁明县| 南召县| 千阳县| 张家口市| 永春县| 汤阴县| 浦东新区| 汶上县| 保德县| 邮箱| 巴里| 平塘县| 荣昌县| 资源县| 安徽省| 平原县| 武安市| 中江县| 锡林浩特市| 高尔夫| 天台县| 平武县| 阜南县| 通化县| 上犹县|