`

jsf-错误信息处理

    博客分类:
  • jsf
阅读更多
JSF在转换和验证时都有可能会产生错误信息:
在使用标准转换器或验证器时,当发生错误时,会有一些预定义的错误信息显示,这些信息可以使用<h:messages>或<h:message>标签来显示出来,而这些预定义的错误信息也是可以修改的,您所要作的是提供一个信息资源文件,例如:
• 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
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<application>
<local-config>
<default-locale>en</default-locale>
<supported-locale>zh_TW</supported-locale>
</local-config>
<message-bundle>messages</message-bundle>
</application>
.....
</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来提供信息,例如在 JSF-自定义验证器 中我们就这么用过:
....
if(password.length() < 6) {
FacesMessage message = new FacesMessage(
FacesMessage.SEVERITY_ERROR,
"字符长度小于6",
"字符长度不得小于6");
throw new ValidatorException(message); 
}
....

最好的方法是在信息资源文件中提供信息,这么一来如果我们要修改信息,就只要修改信息资源文件的内容,而不用修改程序,来看一个简单的例子,假设我们的信息资源文件中有以下的内容:
onlyfun.caterpillar.message1=This is message1.
onlyfun.caterpillar.message2=This is message2 with \{0} and \{1}.
则我们可以在程序中取得信息资源文件的内容,例如:
package onlyfun.caterpillar;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.faces.context.FacesContext;
improt javax.faces.component.UIComponent;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
....
public void xxxMethod(FacesContext context,
UIComponent component,
Object obj) {
// 取得应用程序代表对象
Application application = context.getApplication();
// 取得信息文件主名称
String messageFileName =
application.getMessageBundle();
// 取得当前 Locale 对象
Locale locale = context.getViewRoot().getLocale();
// 取得信息绑定 ResourceBundle 对象
ResourceBundle rsBundle =
ResourceBundle.getBundle(messageFileName, locale);
String message = rsBundle.getString(
"onlyfun.caterpillar.message1");
FacesMessage facesMessage = new FacesMessage(
FacesMessage.SEVERITY_FATAL, message, message);
....
}
....
....

接下来您可以将FacesMessage对象填入ValidatorException或ConverterException后再丢出,FacesMessage建构时所使用的三个参数是严重程度、概述信息与详述信息,严重程度有SEVERITY_FATAL、SEVERITY_ERROR、SEVERITY_WARN与SEVERITY_INFO四种。
如果需要在信息资源文件中设定{0}、{1}等参数,则可以如下:
....
String message = rsBundle.getString(
"onlyfun.caterpillar.message2");
Object[] params = {"param1", "param2"};
message = java.text.MessageFormat.format(message, params);
FacesMessage facesMessage = new FacesMessage(
FacesMessage.SEVERITY_FATAL, message, message);
....

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

相关推荐

    jsf-api.jar

    在开发多语言应用时,尤其是针对中文用户的场景,`jsf-api.jar` 的这一特性显得尤为重要,它确保了本地化资源的正确加载,为用户提供符合语言习惯的错误信息和提示。 JSF框架主要由以下几个关键组件构成: 1. **...

    jsf-api-1.2

    **错误和异常处理** 在JSF 1.2中,可以通过配置错误页面和全局异常处理器来捕获和呈现错误信息,以提供友好的用户体验。 综上所述,"jsf-api-1.2"提供了丰富的API和功能,使开发者能够高效地构建和维护企业级的Java...

    jsf1.2 jar包下载

    4. **更好的错误处理和调试**:提供了更丰富的错误信息和日志记录,帮助开发者在遇到问题时能够更快定位和解决。 5. **性能优化**:JSF 1.2对渲染树的处理进行了优化,提高了框架的整体性能,尤其是在大型应用中的...

    jsf必需的jar包

    例如,`javax.faces.context.FacesContext`的实现就位于`jsf-impl.jar`中,它负责在整个JSF请求处理过程中提供上下文信息。同样,`javax.faces.application.ViewHandler`的实现也是在这里,它控制着视图的创建、渲染...

    esigate-jsf-4.0-beta-1.zip

    Esigate-JSF-4.0-Beta-1项目结合了Esigate的反向代理功能和JSF的前端开发能力,为开发者提供了一个强大的工具集,能够处理复杂的Web应用架构,提高性能和安全防护。而ant-get-free-port插件则作为辅助工具,解决了在...

    jsf-facelets1.1.9

    2. **增强的错误处理**:提供了更详细的错误报告和调试信息,帮助开发者更快地定位和解决问题。 3. **新特性支持**:引入了一些新的API和特性,以适应不断发展的JSF标准。 4. **更好的兼容性**:与JSF 1.x系列的其他...

    weld-jsf-permalink-1.1.5.Final.zip

    JSF 还支持数据绑定,事件处理,以及与服务器端的通信。 3. **Flux 架构**:Flux 是 Facebook 为前端 Web 开发提出的一种架构模式,强调单向数据流。它将应用程序分为 Store(存储状态)、Dispatcher(调度器)、...

    JSF API 2.1.2

    5. **错误处理和验证**:JSF提供了强大的验证框架,可以在不同生命周期阶段进行验证,并且有完善的错误处理机制。 在压缩包中,有两个重要的文件: - `jsf-impl-2.1.2.jar`:这是JSF的实现库,包含了框架的实际...

    JSF API

    JSF API允许开发者在每个阶段插入自定义的行为,如在验证失败时处理错误或在模型更新后执行业务逻辑。 3. **数据绑定和转换验证** JSF提供数据绑定机制,允许将UI组件的值与后端bean的属性直接关联。`javax.faces....

    JSF1.2的jar包

    在这些阶段中,JSF处理用户的输入、验证数据、更新模型,并调用后端业务逻辑。 3. **FacesContext**:JSF框架中的关键对象,它是与当前请求相关的上下文,包含了请求、响应、组件树、消息和配置信息。 4. **...

    JSF与hibernate整合的登陆

    JSF提供了组件库、事件处理机制和生命周期管理,允许开发者通过声明式的方式处理UI逻辑,降低了前端开发的复杂性。 **Hibernate** 是一个流行的Java持久化框架,用于管理和操作数据库。它提供了对象关系映射(ORM)...

    jsf介绍和例子

    6. **导航和错误处理** - 掌握如何配置faces-config.xml以实现页面间的导航和错误处理策略。 **提供的文件:** 1. **jsf-1.0.3.jar** - 这可能是JSF框架的一个早期版本的库文件,用于支持框架的运行。 2. **jsf-api...

    taller-jsf-spring:高JSF弹簧

    6. **错误和异常处理**:学习如何在JSF和Spring中统一错误处理,提供一致的用户体验。 7. **Spring Boot集成**:如果使用Spring Boot,可以快速启动和运行JSF应用,同时享受到Boot的自动化配置和其他便利。 8. **...

    《JSF入门 - 简体中文版》.pdf

    ##### 3.5 错误信息处理 在数据验证失败时,JSF会自动显示默认的错误信息。但是,为了提高用户体验,开发者通常会自定义错误消息,使其更具描述性和友好性。 ##### 3.6 自定义转换, 验证标签 除了使用自定义的...

    mojarra-2.1.2-FCS-binary JSF 开发Jar包

    4. **生命周期管理**:JSF有明确的请求处理生命周期,包括初始化、应用请求值、处理验证、更新模型值和调用后处理等阶段。 5. **Facelets**:JSF 2.x引入了Facelets作为默认视图层技术,它是一种XML-based模板语言,...

    清晰版--JSF入门.pdf

    **3.5 错误信息处理** 当数据验证失败时,JSF会自动显示错误信息。开发者可以通过配置文件或代码来自定义错误消息。 **3.6 自定义转换, 验证标签** 除了自定义转换器和验证器之外,还可以定义自定义标签来增强JSF...

    jsf学生信息管理

    总的来说,"jsf学生信息管理"项目是一个全面的JSF实践案例,涵盖了从基础的UI设计到复杂的业务逻辑处理,对于初学者来说,它提供了一个良好的学习平台,可以帮助理解和掌握JSF技术。同时,这个项目也可以作为一个...

    jsf的jar包 绝对可用

    JavaServer Faces(JSF)是Java平台上的一种用于构建用户界面的服务器端框架,它简化了Web应用程序的开发,特别是处理用户...有效的错误处理、适当的组件选择和合理的模型-视图-控制器设计都是JSF成功应用的关键因素。

    JSF2.0实战 - 6、TextBox

    在实践中,你可能还会遇到如何处理TextBox的转换(conversion)和验证错误,如何在多个TextBox之间传递值,以及如何在TextBox与其他JSF组件(如CommandButton)协作等问题。了解这些概念和实践,将帮助你更好地利用...

Global site tag (gtag.js) - Google Analytics