閑人野居
          好好學(xué)習(xí),天天向上
          posts - 57,  comments - 137,  trackbacks - 0
              這些東東,對于web框架來說,是必不可少的,來看看jsf是如何實現(xiàn)的。首先看一下國際化,默認(rèn)的情況下,會選擇默認(rèn)的locale,以及相應(yīng)的資源文件。當(dāng)然可以通過以下方式進(jìn)行配置:
          <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應(yīng)用一致。
          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


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


          當(dāng)然這是使用默認(rèn)的locale設(shè)置,如果想動態(tài)切換locale,目前我的處理方式是這樣的:
          <f:loadBundle basename="messages_#{localeBean.locale}" var="msg"/>

          當(dāng)然localeBean.locale的值是動態(tài)更改的,可以為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。通常的驗證機制,都是通過服務(wù)端來實現(xiàn)。如果想支持客戶端支持,估計還得自己寫一套接口去替換。不過看了其生命周期,覺得很難實現(xiàn),除非脫離其生命周期。當(dāng)然,這些使用ajax來處理,可能會減少服務(wù)端的通信負(fù)擔(dān)。
             其默認(rèn)的驗證實現(xiàn),包括以下幾個:
             DoubleRange:<f:validateDoubleRange>
                Length:
          <f:validateLength>
                LongRange:
          <f:validateLongRange>

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

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

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




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

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

          常用鏈接

          留言簿(12)

          隨筆分類(59)

          隨筆檔案(57)

          blog

          java

          uml

          搜索

          •  

          積分與排名

          • 積分 - 357748
          • 排名 - 155

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 秭归县| 长宁县| 河西区| 岳池县| 湘阴县| 瑞昌市| 高密市| 南投市| 丹凤县| 崇阳县| 祁连县| 涟水县| 神农架林区| 中方县| 攀枝花市| 调兵山市| 余干县| 阜阳市| 江陵县| 开鲁县| 霍林郭勒市| 丹棱县| 澄迈县| 自贡市| 孟津县| 太仓市| 宣威市| 阜南县| 湄潭县| 吕梁市| 青川县| 梅州市| 绍兴市| 石家庄市| 昭通市| 鲁甸县| 宁强县| 文登市| 葵青区| 康平县| 鸡东县|