JSF全面理解之消息处理
2007-05-30 16:32Update
JSF里怎样进行消息处理呢?本文就此介绍一下JSF的消息处理过程。
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消息的标签了。
JSF消息的添加:
JSF里添加JSF消息只需要简单地调用FacesContext.addMessage即可。这个方法可以把指定的消息注册到facesContext里,之后便可在JSP里加以显示。facesContext.addMessage(clientId, FacesMessage);
clientId:与该消息相关联的组件ID,未指定的时候,为全局消息
FacesMessage:JSF消息体定义。它有3个属性:
1) FacesMessage.Severity:消息的级别。可以为FacesMessage.SEVERITY_INFO(一般信息),FacesMessage.SEVERITY_WARNING(警告),FacesMessage.SEVERITY_ERROR(错误),FacesMessage.SEVERITY_FATAL(致命错误)。
2) 消息概要
3) 消息详细内容
使用例:
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
summary,
detail);
FacesContext.getInstance().addMessage(clientId, msg);
JSF消息的显示:
JSF消息的显示就更简单了,只需在JSP里调用h:message或h:messages即可。例:
<h:messages globalOnly="true" styleClass="error" showSummary="" showDetail="" layout="table" />
globalOnly:为true时,只显示全局消息。
showSummary:是否显示消息概要。
showDetail:是否显示消息详细。
其他:请查看相应的资料,这里就不做介绍了。
<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相关资料),new 一个FacesMessage,请参考上面的说明。
使用自定义资源文件消息,做法同上,这里也不做介绍了。
- Relative Articles
- JSF Validator进阶篇 - 自定义JSF Validator - (2007-12-20 19:37)
- JSF Validator入门基础篇 - JSF Validator的介绍与使用 - (2007-12-19 22:22)
- JSF应用中捕捉managed-bean构造方法里抛出的异常 - (2007-12-17 22:46)
- JSF Converter基础篇 - JSF Converter介绍与使用 - (2007-11-04 13:33)
- 深入了解JSF - (2007-11-04 13:20)
- f:selectItems - JSF标签 f:selectItems 的使用方法 - (2007-10-25 10:53)
- JSF Converter应用篇 - 自定义JSF Converter - (2007-09-28 15:04)
- 开发JSF应用的基本流程与方法 - (2007-08-15 00:51)
- JSF应用单点权限认证的构建与实现 - (2007-06-14 23:37)
- 深入了解JSF(二):从JSF的Lifecycle看JSF对页面的处理机制和流程 - (2007-06-01 16:39)
- JSF本地化策略 - (2007-05-29 17:42)
- JSF 5分钟入门:Hello World! - (2007-05-29 00:40)
- 推荐一个FacesUtils工具类 - (2007-05-29 00:40)
- 从JSF的切入点控制JSF - (2007-05-29 00:40)