零基础学Struts
上QQ阅读APP看书,第一时间看更新

3.7 类型转换中错误处理

在进行类型转换时,如果出现错误系统将会提示错误信息。Struts 2默认提供了错误信息提示,但是这些错误信息提示不够友好,下面将介绍如何自定义错误信息来取代Struts 2的默认错误信息。

3.7.1 定义全局类型转换错误处理信息

前面输入的用户信息,都是按照转换要求来输入的。假如不按照要求输入,系统都会出现转换错误提示信息,如图3.31所示。

图3.31 类型转换失败错误提示

这样的提示信息一般用户都是无法看懂的。可以修改这些错误提示信息吗?答案是可以的,可以通过国际化资源文件来实现自定义的转换错误信息。

步骤如下。

(1)添加自定义错误信息也是在国际化资源文件中配置。首先在“struts.xml”文件的“struts.xml”文件中配置一个struts. custom.i18n.resources常量,并指定国际化资源文件的baseName,代码如下所示。

        <? xml version="1.0" encoding="UTF-8" ? >
        <! DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd">
          <struts>
             <! -- 指定资源文件baseNamemessageResource -->
             <constant name="struts.custom.i18n.resources" value="messageResource"></constant>
             <package name="struts2" extends="struts-default">
                  <! -- 定义inputAction,其实现类为net.hncu.action.InputAction-->
                  <action name="input" class="net.hncu.action.InputAction">
                        <! -- 定义处理结果与视图资源之间的关系-->
                        <result name="success">/output.jsp</result>
                        <result name="input">/input.jsp</result>
                    </action>
             </package>
          </struts>

(2)分别添加中文环境资源文件和英文环境资源文件。

中文环境资源文件messageResource_zh_CN.properties代码如下。

        xwork.default.invalid.fieldvalue ={0}字段类型转换失败

英文环境资源文件messageResource_en_US.properties代码如下。

        xwork.default.invalid.fieldvalue = {0} error

xwork.default.invalid.fieldvalue表示提示错误信息的key,而后面的信息表示自定义的错误提示信息。其中“{0}”是占位符,显示时将使用Action中相应的属性替换。比如Action中的name属性类型转换失败就会替换成name。

这时再来看看错误信息,已经替换成了自定义的错误信息了,如图3.32所示。如果把IE语言环境设置成美国英语,系统就会提示相应的英文错误信息,如图3.33所示。

图3.32 自定义错误提示信息

图3.33 英文错误提示信息

使用“1988-04-05”这样的日期格式,在英文环境下不应该是这样的日期格式,所以会提示转换错误信息。

前面这种方式是定义全局的类型转换错误处理信息。如果要为每个字段提供特定的提示信息,则必须定义局部的类型转换错误处理信息。

3.7.2 定义局部类型转换错误处理信息

局部类型转换错误处理信息就是对每个属性进行类型转换时出现的错误信息进行定义。这样的错误对用户更加友好,使得用户能够更加地明白到底出现了什么错误。定义局部类型转换错误处理信息的步骤如下。

(1)在Action类同目录下添加ActionName.properties文件。从文件名可以看出和定义局部类型转换器非常类似,只是少了“-conversion”。同样表示在执行Action时如果出现类型转换错误时,会找到该文件并把其中定义好的错误信息显示出来。ActionName.properties资源文件内容如下所示。

        invalid.fieldvalue.属性名=错误提示信息

(2)分别添加中文环境资源文件和英文环境资源文件。

英文环境资源文件InputAction_en_US.properties代码如下。

        invalid.fieldvalue.age    = please input right age
        invalid.fieldvalue.birth = please input right birth
        invalid.fieldvalue.name   = please insert space between firstName and lastName

中文环境资源文件InputAction_zh_CN.properties代码如下。

        invalid.fieldvalue.age    = 请输入正确的年龄格式
        invalid.fieldvalue.birth = 请输入正确的日期格式
        invalid.fieldvalue.name   =   firstNamelastName中间使用空格隔开

这是再来看看错误信息,如图3.34所示。每个属性对应的错误信息代码都不同了,这样的错误信息更加友好,用户更加能看懂。

如果把IE语言环境设置成美国英语,就会提示相应的英文错误信息,如图3.35所示。

图3.34 自定义错误提示信息

图3.35 英文错误提示信息