`

JSF FacesMessage使用总结: 错误讯息处理

阅读更多
在使用标准转换器或验证器时,当发生错误时,会有一些预设的错误讯息显示,这些讯息可以使用
  • messages.properties
javax.faces.component.UIInput.CONVERSION=Format Error.
javax.faces.component.UIInput.REQUIRED=Please input your data.
....

javax.faces.component.UIInput.CONVERSION是用来设定当转换器发现错误时显示的讯息,而 javax.faces.component.UIInput.REQUIRED是在标签设定了required为true,而使用者没有在栏位输入时显 示的错误讯息。

您要在faces-config.xml中告诉JSF您使用的讯息档案名称,例如:
  • faces-config.xml
 
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE faces-config PUBLIC  
  3.  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"  
  4.  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">  
  5.   
  6. <faces-config>  
  7.     <application>  
  8.         <local-config>  
  9.             <default-locale>en</default-locale>  
  10.             <supported-locale>zh_TW</supported-locale>  
  11.         </local-config>  
  12.         <message-bundle>messages</message-bundle>  
  13.     </application>  
  14.     .....  
  15.   
  16. </faces-config>  

在这边我们设定了讯息档案的名称为messages_xx_YY.properties,其中xx_YY是根据您的Locale来决定,转换器或验证器的错误讯息如果有设定的话,就使用设定值,如果没有设定的话,就使用预设值。

验证器错误讯息,除了上面的javax.faces.component.UIInput.REQUIRED之外,还有以下的几个:
讯息识别 预设讯息 用于
javax.faces.validator.NOT_IN_RANGE Validation Error: Specified attribute is not between the expected values of {0} and {1}. DoubleRangeValidator与 LongRangeValidator,{0}与{1}分别代表minimum与maximum所设定的属性
javax.faces.validator.DoubleRangeValidator.MAXIMUM、 javax.faces.validator.LongRangeValidator.MAXIMUM Validation Error: Value is greater than allowable maximum of '{0}'. DoubleRangeValidator或 LongRangeValidator,{0}表示maximum属性
javax.faces.validator.DoubleRangeValidator.MINIMUM、 javax.faces.validator.LongRangeValidator.MINIMUM Validation Error: Value is less than allowable minimum of '{0}'. DoubleRangeValidator或 LongRangeValidator,{0}代表minimum属性
javax.faces.validator.DoubleRangeValidator.TYPE、 javax.faces.validator.LongRangeValidator.TYPE Validation Error: Value is not of the correct type. DoubleRangeValidator或 LongRangeValidator
javax.faces.validator.LengthValidator.MAXIMUM Validation Error: Value is greater than allowable maximum of ''{0}''. LengthValidator,{0}代表maximum
javax.faces.validator.LengthValidator.MINIMUM Validation Error: Value is less than allowable minimum of ''{0}''. LengthValidator,{0}代表minimum属性

在您提供自订讯息的时候,也可以提供{0}或{1}来设定显示相对的属性值,以提供详细正确的错误提示讯息。

讯息的显示有概述讯息与详述讯息,如果是详述讯息,则在识别上加上 "_detail",例如:

javax.faces.component.UIInput.CONVERSION=Error.
javax.faces.component.UIInput.CONVERSION_detail= Detail Error.
....

除了在讯息资源档中提供讯息,您也可以在程式中使用FacesMessage来提供讯息,例如在 自订验证器 中我们就这么用过:

 
  1. ....  
  2.         if(password.length() < 6) {  
  3.            FacesMessage message = new FacesMessage(  
  4.                 FacesMessage.SEVERITY_ERROR,  
  5.                 "字元长度小于6",  
  6.                 "字元长度不得小于6");  
  7.            throw new ValidatorException(message);  
  8.        }  
  9. ....  


最好的方法是在讯息资源档中提供讯息,这么一来如果我们要修改讯息,就只要修改讯息资源档的内容,而不用修改程式,来看一个简单的例子,假设我们的讯息资源档中有以下的内容:

onlyfun.caterpillar.message1=This is message1.
onlyfun.caterpillar.message2=This is message2 with {0} and {1}.

则我们可以在程式中取得讯息资源档的内容,例如:

 
  1. package onlyfun.caterpillar;  
  2.   
  3.  import java.util.Locale;  
  4.  import java.util.ResourceBundle;  
  5.  import javax.faces.context.FacesContext;  
  6.  improt javax.faces.component.UIComponent;  
  7.  import javax.faces.application.Application;  
  8.  import javax.faces.application.FacesMessage;  
  9.    
  10.      ....  
  11.      public void xxxMethod(FacesContext context,  
  12.                           UIComponent component,  
  13.                           Object obj) {  
  14.          // 取得应用程式代表物件  
  15.          Application application = context.getApplication();  
  16.          // 取得讯息档案主名称  
  17.          String messageFileName =  
  18.                            application.getMessageBundle();  
  19.          // 取得当前 Locale 物件  
  20.          Locale locale = context.getViewRoot().getLocale();  
  21.          // 取得讯息绑定 ResourceBundle 物件  
  22.          ResourceBundle rsBundle =  
  23.            ResourceBundle.getBundle(messageFileName, locale);  
  24.   
  25.          String message = rsBundle.getString(  
  26.                           "onlyfun.caterpillar.message1");  
  27.          FacesMessage facesMessage = new FacesMessage(  
  28.               FacesMessage.SEVERITY_FATAL, message, message);  
  29.          ....  
  30.      }  
  31.      ....  
  32.  ....  
  33.   
  34.    


接下来您可以将FacesMessage物件填入ValidatorException或 ConverterException后再丢出,FacesMessage建构时所使用的三个参数是严重程度、概述讯息与详述讯息,严重程度有 SEVERITY_FATAL、SEVERITY_ERROR、SEVERITY_WARN与SEVERITY_INFO四种。

如果需要在讯息资源档中设定{0}、{1}等参数,则可以如下:


 
  1. ....  
  2. String message = rsBundle.getString(  
  3.                      "onlyfun.caterpillar.message2");  
  4. Object[] params = {"param1""param2"};  
  5. message = java.text.MessageFormat.format(message, params);  
  6.   
  7. FacesMessage facesMessage = new FacesMessage(  
  8.              FacesMessage.SEVERITY_FATAL, message, message);  
  9. ...   

如此一来,在显示讯息时,onlyfun.caterpillar.message2的{0}与{1}的位置就会被"param1"与"param2"所取代。

分享到:
评论

相关推荐

    JSF页面,<p:fileUpload组件文件上传

    总结一下,PrimeFaces的`&lt;p:fileUpload&gt;`组件在JSF中提供了直观且易于使用的文件上传功能。通过配置组件属性和后台处理方法,开发者可以轻松地集成文件上传功能,并进行定制以满足特定的安全和业务需求。在实际项目...

    JSF-UIREPEAT

    总结一下,JSF-UIRepeat是JSF框架中的一个重要组件,用于在Web页面上显示和操作来自数据集合的内容。通过理解和实践源代码,你可以掌握如何在JSF应用程序中有效地使用UIRepeat,以及如何构建动态、数据驱动的用户...

    JSF2.0实战 - 7、自定义<h:head>

    3. 在页面中使用自定义组件:现在可以在JSF视图文件中使用`&lt;custom:head&gt;`标签了,它可以替换默认的`&lt;h:head&gt;`。 ```xhtml &lt;!DOCTYPE html&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:h=...

    jsf规范

    2. **JSF请求生成JSF响应**:这是最常见的场景,当用户通过JSF组件提交表单时,请求会映射到JSF实现的控制器,然后按生命周期的顺序执行,包括解析请求参数、更新模型值、执行验证和事件处理等。 **生命周期情景** ...

    JSF生命周期总结JSF生命周期总结

    JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结

    用jsf做的登录注册的组件

    8. **异常处理**:当用户输入无效或发生错误时,JSF可以通过`FacesMessage`来显示错误信息,也可以自定义错误页面来优雅地处理异常情况。 9. **JSF生命周期**:理解JSF的请求处理流程对于调试和优化非常重要,包括...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    学习这部分,你需要了解如何导入和使用JSF的库,例如`javax.faces.*`和`org.primefaces.*`,以及它们提供的功能,如数据验证、转换器、事件处理等。 4. **Ajax4JSF使用手册**:Ajax4JSF是JSF的一个扩展,它为JSF...

    JSF学习,JSF标签使用

    JSF的学习入门知识教程,里面有例子还有各个标签的使用及属性介绍

    jsf中文使用教程jsf中文使用教程

    5. **国际化支持**:JSF支持多语言,这在“JSF中文使用教程”中可能包含如何设置和使用中文资源的内容。 **学习JSF的关键概念**: 1. **Facelet**:Facelets是JSF的默认视图技术,用于创建和组织用户界面组件。 2. ...

    JSF1.2的新特性总结.

    - 对于性能方面,JSF 1.2进行了多处优化,例如减少了不必要的服务器往返,提高了处理速度和内存使用效率。 12. **与Java EE 5兼容**: - JSF 1.2是作为Java EE 5的一部分发布的,这意味着它可以无缝集成到其他...

    使用NetBeans进行基础JSF开发

    6. **使用NetBeans的JSF工具**:NetBeans提供了JSF组件拖放设计、代码提示、自动完成等功能,帮助开发者更高效地编写JSF代码。 7. **测试和优化**:在浏览器中查看应用程序,测试各种功能,根据需要调整组件行为和...

    jsf第一个例子 jsf架包 jsf实例

    1. **JSF生命周期**:JSF有六个主要阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用业务逻辑以及渲染响应。开发者可以在这些阶段插入自定义行为。 2. **JSF页面(Facelets)**:JSF使用Facelets...

    JSF1.2的jar包

    9. **FacesMessage**:框架用于向用户显示错误或警告消息的类。开发者可以在代码中创建FacesMessage,并将其添加到FacesContext,然后在视图中展示。 10. **FacesConfig.xml**:JSF的配置文件,定义了应用的组件、...

    JSF 很全面的帮助文档

    JavaScriptServerFaces...总结来说,这份“JSF很全面的帮助文档”将引导开发者深入理解JSF框架的各个方面,从基础概念到高级特性,包括组件使用、生命周期管理、数据绑定、异步处理等,是学习和提升JSF技能的重要资源。

    jsf标签使用文档

    JSF提供了丰富的功能,包括表单处理、验证、国际化等,并通过一套强大的组件模型支持网页组件的创建与管理。本文档将详细介绍JSF中的一些核心标签及其使用方法。 #### 二、JSF页面配置与初始化 在使用JSF开发应用...

    JSF框架使用入门

    9. **学习资源**:提供的文件"JSF框架使用入门.avi"可能是一个视频教程,可以帮助我们直观地了解JSF的使用;"JSF框架使用入门.ppt"可能是PPT形式的教程,详细讲解了JSF的基础知识和实践案例;"jsf1"可能是源代码示例...

    jsf 最简单的eclipse工程例子

    你可以创建一个Java类并使用`@ManagedBean`和`@RequestScoped`注解标记为JSF Bean,然后将Bean的属性与JSF页面的组件绑定。 5. **配置Facelets**:Facelets是JSF的默认视图技术,用于渲染UI组件。在`faces-config....

    jsf+EJB开发实例

    4. **错误处理与异常捕获**:JSF和EJB都提供了错误处理机制,例如JSF的`FacesMessage`和EJB的`抛出异常`,可以有效地处理和报告错误。 5. **安全性**:通过EJB的角色管理和JSF的安全控制,可以实现基于角色的访问...

    JSF实现,里边有很多JSF工程用到的Jar包

    10. **FacesMessage**:JSF使用FacesMessage对象来记录和显示错误、警告和其他信息。 这个`myfaces-core-1.2.9-bin`压缩包中可能包含了以下内容: - `lib`目录:存放各种JSF相关的JAR文件,如MyFaces Core API、...

    JSF基础教程 简体中文

    o 错误讯息处理 o 自订转换, 验证标签 事件处理 JSF的事件模型提供一个近似的桌面GUI事件模式,让熟悉GUI设计的人员也能快速上手Web程序设计。 o 动作事件 o 实时事件 o 值变事件 o Phase 事件  JSF 标签  网页...

Global site tag (gtag.js) - Google Analytics