资源描述
Struts2的类型转换异常处理
在视图页面中,用户的输入是很复杂的,偶然的输入错误或者恶意输入都会导致程序异常。因此,必须对用户输入的数据进行校验。例如,年龄信息必须是整数,一但用户输入了一个ABC,这时就需要进行数据类型校验。
Struts 2.0提供了类型转换异常处理机制,使用的是一个名字为conversionError的拦截器,这个拦截器被注册在默认的拦截器栈中。如果Struts 2.0在类型转换过程中出现问题,这个拦截器就会进行拦截,并将异常信息封装成一个fieldError对象在视图页面上显示出来。
整个过程无须我们参与,Struts 2.0的类型转换器和conversionError拦截器会自动实现。
(一) 简单类型转换异常
主要是处理一些String、int、Date等数据类型之间的转换异常。
见例子“convError”,一个用户注册的功能:
(1)Action的代码:
package conv;
import com.opensymphony.xwork2.ActionSupport;
public class userAction extends ActionSupport
{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String addUser()
{
return SUCCESS;
}
}
从上述代码中我们可以看到该Action仅,包含了name和age两个属性,其中age属性是int类型的。
(2)strust.xml配置文件代码:
<?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>
<constant name="struts.enable.DynamicMethodInvocation"
value="false" />
<constant name="struts.devMode" value="false" />
<package name="Struts2.0_AddBook" extends="struts-default">
<action name="addUser" class="conv.userAction" method="addUser">
<result name="input">index.jsp</result>
</action>
</package>
</struts>
在这个配置文件中的package包,继承了struts-default.xml文件,而struts-default.xml文件定义了Struts 2.0内建的拦截器,其中就包括我们上面提到的conversionError拦截器。
(3)页面文件index.jsp:
<%@page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<s:head/>
<body>
<br><br>
<center>
<br>
<h2>用户注册</h2>
<s:form action="addUser" method="addUser">
<s:textfield name="name" label="用户名称"/>
<s:textfield name="age" label="用户年龄"/>
<s:submit value="注册"/>
</s:form>
</center>
</body>
</html>
为了使程序出现类型转换异常,在用户年龄文本框中输入ABC,然后单击“注册”,使其出现异常。
出现了一条英文提示信息,意思是说“年龄字段输入无效”,这条英文提示信息是Struts 2.0默认的。
资源国际化问题(i18n, 即“internationalization”,国际化)
在中文环境中,我们通常希望看到中文信息,因此需要修改Struts 2.0默认的英文提示信息。
新建一个中文资源国际化文件,是一个文本文件,如文件名为“a”,在该文件中添加如下一条代码:
xwork.default.invalid.fieldvalue=所输入数据的类型不符合要求!
用记事本在某处建好a文件,然后用“native2ascii”命令把这个源文件转化为中文资源国际化文件,转化后的资源文件名必须为“globalMessages_zh_CN.properties”。
Zh表示中文,CN表示中国,扩展名properties表示资源文件。
在DOS窗口用转化命令,为:
native2ascii –encoding gb2312 a globalMessages_zh_CN.properties
然后复制文件globalMessages_zh_CN.properties,再到MyEclipse中右击“src”,用“Paste”,把它放在与struts.xml同级别位置。
最后,在配置文件中添加一个constant语句,让struts知道这个资源文件,内容为:
<constant name="struts.custom.i18n.resources" value="globalMessages" />
运行一下,可以看到中文提示信息的效果。见实例“convError”。
如果看到得是乱码提示,可以试试在转换资源文件时,用把gb2312替换成UTF-8
3
展开阅读全文