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

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

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

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    十一 自定義組件標簽

    Posted on 2009-01-20 14:50 非洲小白臉 閱讀(226) 評論(0)  編輯  收藏 所屬分類: JSF

    完成了UIComponent的定制后,下面就需要自定義一個Tag來與之對應。自定義Tag的目的在于設定UIComponent的屬性,取得Renderer的值等。

    自定義Tag需要繼承UIComponentTag

    package test;

    import javax.faces.application.Application;

    import javax.faces.component.UIComponent;

    import javax.faces.context.FacesContext;

    import javax.faces.el.ValueBinding;

    import javax.faces.webapp.UIComponentTag;

    繼承了UIComponentTag

     
    public class TextWithCmdTag extends UIComponentTag {

        private String size;

        private String value;

    綁定到自定義的Component組件。

     
        public String getComponentType() {

            return "test.TextWithCmd";

        }

    綁定到Renderer。這里沒有設定,因為這個組件沒有用Renderer編解碼,而是Component自己實現的。

     
        public String getRendererType() {

            return null;

        }

        public void setProperties(UIComponent component) {

            super.setProperties(component);

          

            setStringProperty(component, "size", size);

            setStringProperty(component, "value", value);

        }

        private void setStringProperty(UIComponent component,

                           String attrName, String attrValue) {

            if(attrValue == null)

                return;

    設置Tag的值綁定到Component上。這樣,Component取值的時候,如果元件屬性設定值找不到,就會從綁定值中去尋找。

     
            if(isValueReference(attrValue)) {

                FacesContext context =

                             FacesContext.getCurrentInstance();

                Application application =

                             context.getApplication();

                ValueBinding binding =

                       application.createValueBinding(attrValue);

                component.setValueBinding(attrName, binding);

            }

            else {

                component.getAttributes().

                              put(attrName, attrValue);

            }

        }

        public void release() {

            super.release();

            size = null;

            value = null;

        }

        public String getSize() {

            return size;

        }

        public void setSize(String size) {

            this.size = size;

        }

        public String getValue() {

            return value;

        }

        public void setValue(String value) {

            this.value = value;

        }

     }

    ▲綁定到Tag上的Conponent組件用的是faces-config.xml中定義的別名,所以我們隨時可以替換掉對于的Component而不改變Tag代碼。

    自定義Tag需要在Tld中聲明:

    <tag>

         <name>textcmd</name>

         <tag-class>test.TextWithCmdTag</tag-class>

         <body-content>empty</body-content>

         <attribute>

            <name>size</name>

         </attribute>

         <attribute>

            <name>value</name>

            <required>true</required>

         </attribute>

     </tag>

    具體程序參看示例程序。

     

    新建一個JSP和一個綁定好的javaBean,就可以看到運行結果了。

    對這類jspBean的建立,前面已經有很多例子了,這里就不再說了。

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

    <%@ taglib uri="/WEB-INF/textcmd.tld" prefix="oc"%>

    <html>

    <link href="../../styles.css" rel="stylesheet" type="text/css" />

    <head>

    <title></title>

    </head>

    <body>

    <f:view>

           <h:form>

         Input data: <oc:textcmd size="10" value="#{componentTestBean.data}" />

           </h:form>

           <h:outputText value="#{componentTestBean.data}" />

    </f:view>

    </body>

    </html>

    運行地址:http://localhost:8080/jsfTest/pages/componentTest.faces

    具體程序參看示例程序。

     

    主站蜘蛛池模板: 午夜一级毛片免费视频| 8x8x华人永久免费视频| 国产精品酒店视频免费看| 亚洲 欧洲 日韩 综合在线| AV无码免费永久在线观看| 亚洲精品视频免费看| 最近免费字幕中文大全视频| 亚洲AV中文无码字幕色三| 免费无码又爽又刺激高潮软件| 亚洲人成影院在线观看| 四虎免费影院ww4164h| 亚洲成人免费网站| 亚洲第一成年免费网站| 亚洲av永久无码一区二区三区| 国内自产拍自a免费毛片| 男男黄GAY片免费网站WWW | 亚洲国产成人久久精品大牛影视| 九九九精品成人免费视频| 亚洲av无码日韩av无码网站冲 | 黄页网站免费观看| 亚洲成a人片在线观看天堂无码| 国产伦精品一区二区三区免费迷| 男男黄GAY片免费网站WWW| 亚洲αv久久久噜噜噜噜噜| 无人在线观看免费高清| 亚洲日本va一区二区三区| 亚洲精品乱码久久久久久蜜桃 | 亚洲黄色在线观看网站| 在线a毛片免费视频观看| jzzjzz免费观看大片免费| 全免费a级毛片免费**视频| 日韩在线观看免费| 亚洲一区二区三区日本久久九| 国产免费久久精品丫丫| 91大神亚洲影视在线| 日韩高清在线免费观看| 久久免费高清视频| 亚洲精品V天堂中文字幕| 国产精品亚洲精品日韩已满| 日本三级2019在线观看免费| 国产免费AV片在线观看播放|