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

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

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

    爪哇一角

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

    十 自定義UIComponent

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

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

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

    這里我們可以繼承已經(jīng)實現(xiàn)的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;

    繼承已經(jīng)實現(xiàn)UIComponentUIInput

     
    public class UITextWithCmd extends UIInput {

    private static final String TEXT = ".text";

        private static final String CMD = ".cmd";

        //不使用Renderer進行解碼

    可以設(shè)定此組件的解碼,編碼不使用Renderer

     
        public UITextWithCmd() {

            setRendererType(null); 

        }

        //--------編碼,生成HTML標(biāo)簽--------------

        public void encodeBegin(FacesContext context)

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

     
                                          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");

        }

    實現(xiàn)標(biāo)簽輸入值的解碼。取得標(biāo)簽的輸入值綁定到響應(yīng)的Bean

     
        // ..........解碼,取得標(biāo)簽的輸入值...................................

        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日韩av欧v在线天堂| 自拍偷自拍亚洲精品第1页| 菠萝菠萝蜜在线免费视频| 91精品免费高清在线| 精品久久久久久久免费加勒比| 久久亚洲国产成人精品无码区| 亚洲国产av美女网站| 一区二区三区免费在线视频 | 亚洲乱码中文字幕久久孕妇黑人| 国产亚洲精久久久久久无码77777| 免费无码专区毛片高潮喷水| 免费精品国偷自产在线在线| 亚洲精品中文字幕乱码三区| A级毛片高清免费视频在线播放| 日本免费一区二区三区最新| 亚洲精品视频免费看| 热久久这里是精品6免费观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 免费毛片在线看不用播放器 | 免费无码又爽又刺激网站| 久久夜色精品国产亚洲| 在线91精品亚洲网站精品成人| 国内精品免费麻豆网站91麻豆 | 亚洲高清在线mv| 91在线免费视频| 久久精品亚洲中文字幕无码麻豆| 国产精品美女久久久免费| 免费亚洲视频在线观看| 亚洲性色精品一区二区在线| 成人免费福利视频| 亚洲精品永久在线观看| 一二三四免费观看在线电影| 久久久久亚洲AV无码专区体验| 精品久久久久成人码免费动漫| 羞羞漫画小舞被黄漫免费| 亚洲国产精品va在线播放| 福利免费观看午夜体检区| 日韩在线视频播放免费视频完整版| 久久精品国产精品亚洲蜜月|