果冻想
认真玩技术的地方

Struts2学习之类型转换中的错误处理

前言

用户通过前台页面输入数据,我们通过Struts2框架,或者自定义的类型转换器进行类型转换时,会存在抛出异常的情况。如果进行类型转换时,出现了异常,那么该如何处理呢?现在就来说说在Struts2框架中是如何处理类型转换异常的。

Struts2的处理原理

Struts2提供了一个名为conversionError的拦截器,这个拦截器被注册在默认的拦截器栈中,根据struts-default.xml配置文件,我们可以看到这样的配置代码:

<interceptor-stack name="defaultStack">
    <interceptor-ref name="exception"/>
    ...
    <interceptor-ref name="conversionError"/>
</interceptor-stack>

在上面的默认拦截器栈中包含了conversionError拦截器的引用,如果Struts2的类型转换器执行类型转换时出现错误,该拦截器将负责将对应错误封装成表单域错误,并将这些错误信息放入ActionContext中。

处理类型转换错误

由于ActionSupport类负责收集类型转换错误,并将它们封装成FieldError对象,添加到ActionContext中;所以我们定义Action时,最好继承ActionSupport,以免带来不必要的麻烦。同时,当类型转换出现异常时,conversionError拦截器会处理该异常,然后转入名为input的逻辑视图,所以应该为对应的Action添加名为input的逻辑视图定义。

下面就通过一个简单的Demo程序来说说类型转换的错误处理。

前台页面代码:

<form action="login" method="post">
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交">
</form>

Action部分代码:

private int age;

public void setAge(int age)
{
    this.age = age;
}

public int getAge()
{
    return age;
}

在struts.xml配置文件中配置以下result:

<result name="input">/error.jsp</result>

这要求从前台页面输入一个整型的年龄值,如果输入一个非整型值,则会出现以下这样的错误提示:

Invalid field value for field "age".

如果不喜欢上述输出的错误提示,我们可以在资源文件中定义这样的提示信息格式:

xwork.default.invalid.fieldvalue={0}字段输入非法

当然了,对于自定义的类型转换器,我们可以抛出异常信息,比如这样:

throw new RuntimeException("Error");

Struts2框架依然会很好的处理转换错误,并提示对应的字段转换失败的信息。

总结

这就是Struts2框架中出现类型转换时的错误处理方式,还是蛮容易理解的。说白了,还是conversionError拦截器和ActionSupport类为我们完成了大部分的工作,而我们只是在“坐享其成”。

果冻想,认真玩技术的地方。

2016年3月21日 于呼和浩特。

赞(30) 打赏
未经允许不得转载:果冻想 » Struts2学习之类型转换中的错误处理
关注微信公众号
关注微信公众号和果冻一起分享你的疑惑与心得。
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

玩技术,我们是认真的

联系我们关于果冻

请我喝杯咖啡也是不错的

支付宝扫一扫打赏

微信扫一扫打赏