這些東東,對(duì)于web框架來(lái)說(shuō),是必不可少的,來(lái)看看jsf是如何實(shí)現(xiàn)的。首先看一下國(guó)際化,默認(rèn)的情況下,會(huì)選擇默認(rèn)的locale,以及相應(yīng)的資源文件。當(dāng)然可以通過(guò)以下方式進(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è)面中使用相應(yīng)的bundle,需要使用以下的標(biāo)記:
<f:loadBundle basename="LocalizationResources" var="bundle"/>
<h:outputText value="#{bundle.halloween}"/>
當(dāng)然這是使用默認(rèn)的locale設(shè)置,如果想動(dòng)態(tài)切換locale,目前我的處理方式是這樣的:
<f:loadBundle basename="messages_#{localeBean.locale}" var="msg"/>
當(dāng)然localeBean.locale的值是動(dòng)態(tài)更改的,可以為en,zh_CN,等等。
個(gè)人覺(jué)得和spring 的web framework相比,沒(méi)有spring的那么靈活,不過(guò)基本上都能解決問(wèn)題,湊合著用吧。
如果想在代碼中使用,還是需要使用以下方法:
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;
}
對(duì)于驗(yàn)證機(jī)制,基本的接口為Validator,只有一個(gè)方法validate。通常的驗(yàn)證機(jī)制,都是通過(guò)服務(wù)端來(lái)實(shí)現(xiàn)。如果想支持客戶端支持,估計(jì)還得自己寫(xiě)一套接口去替換。不過(guò)看了其生命周期,覺(jué)得很難實(shí)現(xiàn),除非脫離其生命周期。當(dāng)然,這些使用ajax來(lái)處理,可能會(huì)減少服務(wù)端的通信負(fù)擔(dān)。
其默認(rèn)的驗(yàn)證實(shí)現(xiàn),包括以下幾個(gè):
DoubleRange:<f:validateDoubleRange>
Length:<f:validateLength>
LongRange:<f:validateLongRange>
從字面意思可以看出來(lái)。
當(dāng)然,每個(gè)組件都有默認(rèn)的驗(yàn)證器required。只要設(shè)置其屬性為ture,就會(huì)進(jìn)行空值判斷。
對(duì)于組件來(lái)說(shuō),支持多個(gè)驗(yàn)證器。但是沒(méi)有看到關(guān)聯(lián)組件的驗(yàn)證器,需要自己實(shí)現(xiàn)。如password的是否一致
類型轉(zhuǎn)換,接口Converter,包括兩個(gè)方法:
public Object getAsObject(FacesContext context, UIComponent component,
String value);
public String getAsString(FacesContext context, UIComponent component,
Object value);
前者轉(zhuǎn)化為對(duì)象,后者為用于頁(yè)面輸出。
在進(jìn)行驗(yàn)證前,都會(huì)先進(jìn)行值轉(zhuǎn)換。
對(duì)于轉(zhuǎn)換,內(nèi)部已經(jīng)提供了基本類型的實(shí)現(xiàn),包括數(shù)字,日期,boolean型。
當(dāng)然Converter另外一個(gè)功能,就是提供格式化輸出,支持NumberFormat和DateFormat的輸出:
包括:<f:convertDateTime>和<f:convertNumber pattern="###,###.##;(###,###.##)"/>其樣式,完全采用相應(yīng)的java樣式。
posted on 2007-05-24 13:26
布衣郎 閱讀(3085)
評(píng)論(0) 編輯 收藏 所屬分類:
web view技術(shù)