<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    十 自定義UIComponent

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

    這里介紹的是讓Component自身負責編碼,解碼的例子。

    我們設置一個簡單的組件,一個文本框加一個按鈕。

    這里我們可以繼承已經實現的UIComponent組件UIInput。

    package test;

    import java.io.IOException;

    import java.util.Map;

    import javax.faces.component.UIInput;

    import javax.faces.context.FacesContext;

    import javax.faces.context.ResponseWriter;

    繼承已經實現UIComponentUIInput

     
    public class UITextWithCmd extends UIInput {

    private static final String TEXT = ".text";

        private static final String CMD = ".cmd";

        //不使用Renderer進行解碼

    可以設定此組件的解碼,編碼不使用Renderer。

     
        public UITextWithCmd() {

            setRendererType(null); 

        }

        //--------編碼,生成HTML標簽--------------

        public void encodeBegin(FacesContext context)

    實現前臺表現層的編碼。可以編寫成HTML或者其他表現層語言。

     
                                          throws IOException {

            ResponseWriter writer = context.getResponseWriter();

            String clientId = getClientId(context);

          

            encodeTextField(writer, clientId);

            encodeCommand(writer, clientId);

        }

        private void encodeTextField(ResponseWriter writer,

                            String clientId) throws IOException {

            writer.startElement("input", this);

            writer.writeAttribute("name", clientId + TEXT, null);

          

            //getValue()繼承于UIInput

            Object value = getValue();

            if(value != null) {

                writer.writeAttribute("value",

                                      value.toString(), null);

            }

            String size = (String) getAttributes().get("size");

            if(size != null) {

                writer.writeAttribute("size", size, null); 

            }

            writer.endElement("input");

        }

        private void encodeCommand(ResponseWriter writer,

                            String clientId) throws IOException {

            writer.startElement("input", this);

            writer.writeAttribute("type", "submit", null);

            writer.writeAttribute("name", clientId + CMD, null);

            writer.writeAttribute("value", "submit", null);

            writer.endElement("input");

        }

    實現標簽輸入值的解碼。取得標簽的輸入值綁定到響應的Bean。

     
        // ..........解碼,取得標簽的輸入值...................................

        public void decode(FacesContext context) {

            Map reqParaMap = context.getExternalContext().

                                    getRequestParameterMap();

            String clientId = getClientId(context);

            String submittedValue =

                       (String) reqParaMap.get(clientId + TEXT);

            setSubmittedValue(submittedValue);

            setValid(true);

        }

    }

    在配置文件faces-config.xml中聲明自定義組件。

    <!-- 自定義組件 -->

     <component>

         <component-type>test.TextWithCmd</component-type>

         <component-class>test.UITextWithCmd</component-class>

     </component>

    這樣,自定義的UIComponent組件就完成了。

     

    主站蜘蛛池模板: 久久亚洲精品无码播放| 亚洲AV中文无码字幕色三| 久久最新免费视频| 亚洲精品美女久久久久9999| 毛片A级毛片免费播放| 一级毛片大全免费播放| 亚洲欧洲国产日韩精品| 在线观看免费亚洲| 日韩免费高清播放器| 亚洲人成网站色在线观看| 亚洲色成人中文字幕网站| 成人激情免费视频| 日韩免费观看一区| 国产亚洲美女精品久久久久| 亚洲A∨无码一区二区三区| 国产精品免费看香蕉| 又大又硬又爽又粗又快的视频免费| 特级毛片全部免费播放| 亚洲免费黄色网址| 亚洲欧洲成人精品香蕉网| 日本a级片免费看| 99热这里只有精品免费播放| 人妻巨大乳hd免费看| 性xxxx黑人与亚洲| 亚洲三级电影网址| 亚洲国产人成精品| 免费看美女让人桶尿口| 亚洲黄色免费网址| 最近免费中文字幕MV在线视频3 | 99热这里只有精品6免费| 免费精品视频在线| 亚洲日产乱码一二三区别 | 亚洲人成77777在线播放网站不卡| 亚洲精品国偷自产在线| 亚洲精品美女久久久久99小说| 在线观看特色大片免费视频| 日本中文字幕免费高清视频| 一本岛v免费不卡一二三区| 亚洲AV无码一区二区三区牲色| 亚洲精品视频在线观看免费| 亚洲av永久无码精品表情包|