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

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

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

    閑人野居
    好好學習,天天向上
    posts - 57,  comments - 137,  trackbacks - 0
        這些東東,對于web框架來說,是必不可少的,來看看jsf是如何實現的。首先看一下國際化,默認的情況下,會選擇默認的locale,以及相應的資源文件。當然可以通過以下方式進行配置:
    <application>
    <locale-config>
    <default-locale>en</default-locale>
    <supported-locale>en</supported-locale>
    <supported-locale>es</supported-locale>
    </locale-config>
    <message-bundle>CustomMessages</message-bundle>
    </application>

    資源文件,也是和其他web應用一致。
    halloween=Every day is like Halloween.
    numberOfVisits
    =You have visited us {0} time(s), {1}. Rock on!
    toggleLocale
    =Translate to Spanish
    helloImage
    =../images/hello.gif


    如果需要在頁面中使用相應的bundle,需要使用以下的標記:
    <f:loadBundle basename="LocalizationResources" var="bundle"/>
    <h:outputText value="#{bundle.halloween}"/>


    當然這是使用默認的locale設置,如果想動態切換locale,目前我的處理方式是這樣的:
    <f:loadBundle basename="messages_#{localeBean.locale}" var="msg"/>

    當然localeBean.locale的值是動態更改的,可以為en,zh_CN,等等。
    個人覺得和spring 的web framework相比,沒有spring的那么靈活,不過基本上都能解決問題,湊合著用吧。

    如果想在代碼中使用,還是需要使用以下方法:
    public static String getMessageString(String name, Object params) {
        String str 
    = "";
        FacesContext facesContext 
    = FacesContext.getCurrentInstance();
        String bundleName 
    = facesContext.getApplication().getMessageBundle();
        
    if (bundleName != null) {
            Locale locale 
    = facesContext.getViewRoot().getLocale();
            ResourceBundle bundle 
    = ResourceBundle.getBundle(bundleName,
                locale, getCurrentClassLoader(params));
            str 
    = bundle.getString(name);
        }
        
    return str;
        }

        對于驗證機制,基本的接口為Validator,只有一個方法validate。通常的驗證機制,都是通過服務端來實現。如果想支持客戶端支持,估計還得自己寫一套接口去替換。不過看了其生命周期,覺得很難實現,除非脫離其生命周期。當然,這些使用ajax來處理,可能會減少服務端的通信負擔。
       其默認的驗證實現,包括以下幾個:
       DoubleRange:<f:validateDoubleRange>
          Length:
    <f:validateLength>
          LongRange:
    <f:validateLongRange>

       從字面意思可以看出來。
       當然,每個組件都有默認的驗證器required。只要設置其屬性為ture,就會進行空值判斷。
      
       對于組件來說,支持多個驗證器。但是沒有看到關聯組件的驗證器,需要自己實現。如password的是否一致

       類型轉換,接口Converter,包括兩個方法:
        public Object getAsObject(FacesContext context, UIComponent component,
                                  String value);
        
    public String getAsString(FacesContext context, UIComponent component,
                                  Object value);

      
      前者轉化為對象,后者為用于頁面輸出。
      在進行驗證前,都會先進行值轉換。
      對于轉換,內部已經提供了基本類型的實現,包括數字,日期,boolean型。
      當然Converter另外一個功能,就是提供格式化輸出,支持NumberFormat和DateFormat的輸出:
      包括:<f:convertDateTime>和<f:convertNumber pattern="###,###.##;(###,###.##)"/>其樣式,完全采用相應的java樣式。




    posted on 2007-05-24 13:26 布衣郎 閱讀(3095) 評論(0)  編輯  收藏 所屬分類: web view技術

    <2007年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 358036
    • 排名 - 156

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲午夜成人精品电影在线观看| 国产精品va无码免费麻豆| MM1313亚洲精品无码久久| 青娱乐在线视频免费观看| 日韩免费三级电影| 久久精品亚洲日本波多野结衣| 精品少妇人妻AV免费久久洗澡| 亚洲精品一卡2卡3卡四卡乱码| 黑人粗长大战亚洲女2021国产精品成人免费视频| 91久久亚洲国产成人精品性色| xxxx日本免费| 色噜噜亚洲男人的天堂| 免费看a级黄色片| 免费毛片毛片网址| 亚洲色成人网站WWW永久| 美女视频黄的免费视频网页 | 日韩一区二区在线免费观看| 亚洲不卡影院午夜在线观看| 两个人日本WWW免费版| 久久久久亚洲AV成人无码| 最刺激黄a大片免费网站| 亚洲综合色区中文字幕| 四虎影视精品永久免费| 亚洲日本人成中文字幕| 日本一道一区二区免费看 | a一级爱做片免费| 亚洲AV中文无码乱人伦下载| 中国人xxxxx69免费视频| 亚洲av永久中文无码精品综合 | 国产香蕉九九久久精品免费 | 亚洲最大的成人网| 日韩精品久久久久久免费| 亚洲男女内射在线播放| 久久国产精品成人免费| 色老板亚洲视频免在线观| 亚洲国产成人五月综合网| 久久亚洲AV成人无码国产电影| 成人午夜18免费看| 亚洲综合色婷婷在线观看| 国产精品亚洲美女久久久| 亚洲色欲色欱wwW在线|