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

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

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

    隨筆-124  評論-49  文章-56  trackbacks-0
    Struts2 的UITag原理:
    Struts2 UITag分三部份組成,一部份用于定義Tag的內容與邏輯的UIBean,一部份用于定義JSP Tag,也就是平時我們定義的那種,最后就是Template,它存放在你的theme目錄之下,是一個FreeMarker模板文件。

    我現在輯寫一份MMTag,它主要是用于輸出帶鏈接的文字,比如像這樣:
    <cur:mm message="'I am a boy.'" />
    就會輸出:
    <a href="http://m.tkk7.com/natlive">I am boy.</a>

    我們先寫UIBean部份:我們把它定義為MM,它繼承于 org.apache.struts2.components.UIBean:

    package limitstudy.corestruts2.tag;

    import org.apache.struts2.components.UIBean;
    import org.apache.struts2.views.annotations.StrutsTag;
    import org.apache.struts2.views.annotations.StrutsTagAttribute;
    import com.opensymphony.xwork2.util.ValueStack;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    @StrutsTag(name="mm", tldTagClass="limitstudy.corestruts2.tag.MMTag", description="MM")
    public class MM extends UIBean {
        private String message;

        public MM(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
            super(stack, request, response);
        }

        @Override
        protected String getDefaultTemplate() {
            return "mm";
        }

        @StrutsTagAttribute(description="set message", type="String")
        public void setMessage(String message) {
            this.message = message;
        }

        @Override
        protected void evaluateExtraParams() {
            super.evaluateExtraParams();

            if (null != message) {
                addParameter("message", findString(message));
            }
        }
    }


    * strutsTag注解指明了該UIBean的名字 和Tag類的類名。
    * getDefaultTemplate()方法用于返回模板的名 字,Struts2會自動在后面加入.ftl擴展名以找到特定的模板文件。
    * setXXX,設置UIBean的屬性,一般Tag中有幾個這樣的屬性,這里就有幾個。@StrutsTagAttribute(description="set message", type="String") 注解,說明該屬性是字符串(也可以是其它),這一步很重要。
    * 覆寫evaluateExtraParams() 方法,在UIBean初始化后會調用這個方法來初始化設定參數,如addParameter方法,會在freemarker里的parameters里加 入一個key value。這里要注意findString,還有相關的findxxxx方法,它們是已經封裝好了的解釋ognl語法的工具,具體是怎么樣的,大家可以 查看一下UIBean的api doc。

    然后是Tag部份:

    package limitstudy.corestruts2.tag;

    import org.apache.struts2.views.jsp.ui.AbstractUITag;
    import org.apache.struts2.components.Component;
    import com.opensymphony.xwork2.util.ValueStack;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class MMTag extends AbstractUITag {
        private String message;

        @Override
        public Component getBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
            return new MM(stack, request, response);
        }

        @Override
        protected void populateParams() {
            super.populateParams();

            MM mm = (MM)component;
            mm.setMessage(message);
        }

        public void setMessage(String message) {
            this.message = message;
        }
    }


    * getBean()返回該Tag中的UIBean。
    * populateParams()初始化參數,一般用來初始化UIBean(Component)。
    * setXXXX設置屬性,和jsp tag是一樣的。

    在/WEB-INF/tlds/下建立current.tld文件(文名隨你喜歡):

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
        <description>test</description>
        <tlib-version>2.0</tlib-version>
        <short-name>cur</short-name>
        <uri>/cur</uri>

        <tag>
            <name>mm</name>
            <tag-class>limitstudy.corestruts2.tag.MMTag</tag-class>
            <body-content>JSP</body-content>
            <attribute>
                <name>message</name>
                <required>true</required>
            </attribute>
        </tag>
    </taglib>


    在源代碼目錄中建立template/simple目錄(這個目錄名和你的theme有關),然后在里面建一個 mm.ftl文件:

    <href="http://www.yinsha.com">${parameters.message?html}</a>


    建一個action測試一下,視圖文件:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="cur" uri="/cur" %>
    <html>
    <head>
        <title><s:property value="message" /></title>
    </head>
    <body>
    <cur:mm message="haoahahhahaha" />
    </body>
    </html>


    完。

    PS: 寫得有些粗鄙,所以,如有問題的,可以留言。

     

     

     

    http://devilkirin.javaeye.com/blog/427395

    http://xiaojianhx.javaeye.com/blog/482888
    posted on 2011-05-30 21:43 junly 閱讀(1133) 評論(1)  編輯  收藏 所屬分類: struts2/struts1.3/JSF

    評論:
    # re: Struts2 自定義標簽的方法[未登錄] 2014-04-03 10:12 |
    我自己寫了一個自定義標簽,但是我現在需要一個擴展struts2的自定義標簽,找到好久還是沒有頭緒,急需賜教,如方便,請加2359428382。多謝。
      回復  更多評論
      
    主站蜘蛛池模板: 免费国产黄网站在线观看视频| 亚洲AV成人片无码网站| 免费无码作爱视频| 亚洲自偷自偷图片| 国产婷婷成人久久Av免费高清| 亚洲一区二区精品视频| 免费一级毛片在线播放放视频| 免费一级黄色毛片| 九九免费久久这里有精品23| 亚洲中文字幕无码爆乳av中文| 思思久久99热免费精品6| 在线日韩日本国产亚洲| 午夜网站在线观看免费完整高清观看| 亚洲精品国产精品乱码视色| 日本视频免费高清一本18| 亚洲另类自拍丝袜第1页| 欧美大尺寸SUV免费| 精品女同一区二区三区免费播放 | 亚洲午夜精品久久久久久浪潮 | 日木av无码专区亚洲av毛片| 日本媚薬痉挛在线观看免费| 亚洲heyzo专区无码综合| 亚洲国模精品一区| 国内精品免费在线观看| 亚洲国产成人精品无码一区二区| 欧洲精品成人免费视频在线观看 | 免费无码一区二区三区蜜桃大| 朝桐光亚洲专区在线中文字幕 | 免费A级毛片无码无遮挡内射| 亚洲人成未满十八禁网站| 久久亚洲国产成人精品无码区| 久久青青草原国产精品免费| 2020年亚洲天天爽天天噜| 又大又黄又粗又爽的免费视频| 国产在线播放线91免费| 亚洲欧洲国产综合| 免费在线黄色网址| 6080午夜一级毛片免费看 | 亚洲乱色熟女一区二区三区蜜臀| 亚洲成A人片在线观看中文| 色猫咪免费人成网站在线观看|