JSF的消息處理主要圍繞著javax.faces.application.FacesMessage,javax.faces.context.FacesContext,java.util.Locale,h:message,h:messages進行。
javax.faces.application.FacesMessage:JSF消息定義。
javax.faces.context.FacesContext:JSF 具有TheadLocale屬性的容器。
java.util.Locale:JSF通過它來作多語言支持了。
h:message/h:messages:用來在JSP里顯示JSF消息的標(biāo)簽了。
JSF消息的添加:
JSF里添加JSF消息只需要簡單地調(diào)用FacesContext.addMessage即可。這個方法可以把指定的消息注冊到facesContext里,之后便可在JSP里加以顯示。
facesContext.addMessage(clientId, FacesMessage);
clientId:與該消息相關(guān)聯(lián)的組件ID,未指定的時候,為全局消息
FacesMessage:JSF消息體定義。它有3個屬性:
1)
FacesMessage.Severity:消息的級別。可以為FacesMessage.SEVERITY_INFO(一般信息),
FacesMessage.SEVERITY_WARNING(警告),F(xiàn)acesMessage.SEVERITY_ERROR(錯誤),
FacesMessage.SEVERITY_FATAL(致命錯誤)。
2) 消息概要
3) 消息詳細內(nèi)容
使用例:
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
summary,
detail);
FacesContext.getInstance().addMessage(clientId, msg);
JSF消息的顯示:
JSF消息的顯示就更簡單了,只需在JSP里調(diào)用h:message或h:messages即可。
例:
<h:messages globalOnly="true" styleClass="error" showSummary="" showDetail="" layout="table" />
globalOnly:為true時,只顯示全局消息。
showSummary:是否顯示消息概要。
showDetail:是否顯示消息詳細。
其他:請查看相應(yīng)的資料,這里就不做介紹了。
<h:message for="username" showSummary="" showDetail=""></h:message>
for:跟消息綁定的組件ID。
上面簡單地介紹了如何添加,以及如何在畫面里顯示JSF消息。但如何通過資源文件顯示定義的消息呢?
下面我們從下面兩方面來介紹:
1,通過JSF message-bundle定義的資源文件配置消息
2,在自定義的資源文件里配置消息
通過JSF message-bundle定義的資源文件配置消息
在faces-config.xml里加上類似如下定義:
<faces-config>
<application>
<message-bundle>Messages</message-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>kr</supported-locale>
<supported-locale>ja</supported-locale>
<supported-locale>zh</supported-locale>
</locale-config>
</application>
...
</faces-config>
然
后,為message-bundle Messages分別定義各自的配置文件:比如英文為Messages_en.properties,韓文為
Messages_kr.properties,日文為Messages_ja.properties,中文為
Messages_zh.properties。
定義消息:
key=message value … {0}…{1}..
定義好之后,便可以通過
Locale locale = facesContext.getViewRoot().getLocale()
取得用戶的語言配置;
String bundleName = facesContext.getApplication().getMessageBundle();
String messageBundle = ResourceBundle.getBundle( bundleName, locale,
Thread.currentThread().getContextClassLoader() );
取得定義好的message-bundle,余下的操作就是從ResourceBundle里取出消息(請參考ResourceBundle相關(guān)資料),new 一個FacesMessage,請參考上面的說明。
使用自定義資源文件消息,做法同上,這里也不做介紹了。