<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是如何實現(xiàn)的。首先看一下國際化,默認的情況下,會選擇默認的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設置,如果想動態(tài)切換locale,目前我的處理方式是這樣的:
    <f:loadBundle basename="messages_#{localeBean.locale}" var="msg"/>

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

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

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

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




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

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

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357203
    • 排名 - 155

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 三级黄色免费观看| 在线观看无码AV网站永久免费| 亚洲欧洲日产专区| 国产亚洲AV夜间福利香蕉149| 国产国产人免费视频成69堂| 91精品全国免费观看青青| 四虎影视久久久免费观看| 亚洲av无码一区二区三区天堂| 亚洲丰满熟女一区二区哦| 亚洲一区二区三区免费视频| 久久亚洲精品成人无码网站 | 久久精品亚洲日本波多野结衣| 国产精品亚洲片在线va| 亚洲一区二区久久| 亚洲第一区二区快射影院| va天堂va亚洲va影视中文字幕| 亚洲特级aaaaaa毛片| 亚洲国产精品xo在线观看| 精品久久亚洲中文无码| 亚洲成人福利在线观看| 国产午夜亚洲精品国产| 亚洲日韩国产二区无码| 黄色网址在线免费观看| 女同免费毛片在线播放| 91久久精品国产免费一区| 成人免费无码大片a毛片| 日批日出水久久亚洲精品tv| 亚洲线精品一区二区三区影音先锋| 1000部国产成人免费视频| 免费视频精品一区二区| 精品一区二区三区免费观看 | 91精品国产免费入口| 成人免费网站在线观看| 4338×亚洲全国最大色成网站| 亚洲黄色网址在线观看| 国产成人高清亚洲一区久久| 久久国产精品萌白酱免费| 国产精品无码免费视频二三区| 青青草原精品国产亚洲av| 国产亚洲Av综合人人澡精品| 免费女人高潮流视频在线观看|