您的位置:首页 > 编程语言 > Java开发

struts2类型转换

2012-06-04 15:09 399 查看
在struts2中如何定义类型转化器
* 定于需求:
* 完成java.lang.String--->java.util.Date类型的转化
例如20111212(Strung)---java.util.Date()

* 在jsp页面增加组件
出生日期:<input type="text" name="createTime">要求输入格式yyyyMMdd<br>

* 在action增加如下属性
private Date createTime;

* 自定义类型转化器(注意转化失败时一定要抛出异常)
public class DateConverter  extends DefaultTypeConverter{
/**
*
* @param context:ongn上下文(?)
* @param value:要转化的值,该值为数组:request.getParameterValues("createTime")--->String[]
* @param toType:要转化的数据类型,这里为java.util.Date
* @return:该方法的返回值就是,action中cteateTime属性要接受到的值
*/
public Object convertValue(Map<String, Object> context, Object value, Class toType) {
if(value==null){
return null;
}
if(toType==null){
return null;
}

if(toType!=java.util.Date.class){
return null;
}

if(value instanceof java.lang.String[]){
String[] str=(String[])value;
try {
if(str[0]!=null&&!"".equals(str[0])){
SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
return sf.parse(str[0]);
}
} catch (ParseException e) {
e.printStackTrace();
/*
* struts2的类类型转化异常是由 <interceptor name="conversionError"
*        class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor>
*        类型转化错误拦截器处理的
*        * 如果类型转化器转化数据出现了异常,则在类型转化器中必须抛出异常,
*            类型转化错误拦截器 只有接受到异常,才转到错误处理页面
*        * 如果类型转化器转化数据出现了异常没有抛出
*          类型转化错误拦截器 不能捕获到异常, 类型转化错误拦截器认为是正确的操作,所以不转到错误处理页面
*/
throw new RuntimeException(e);
}
}
return null;
}
}

* 注册类型转化器
* 配置局部的(在与Action相同的目录下)
* 创建属性文件格式:ActinClassName-conversion.properties
* ActinClassName:action的类名
* -conversion.properties:固定写法
* 内容格式:待转化的属性名称=类型转化器的完整的类路径

* 本例属性文件  UserAction-conversion.properties
* 内容:createTime=cn.itcast.converter.DateConverter

cn/itcast/converter/UserAction--conversion.properties

* 配置全局的(在src目录下)
* 创建属性文件格式:xwork-conversion.properties(固定写法)
* 内容格式:待转化的类型=类型转化器的完整的类路径

* 本例属性文件  :xwork-conversion.properties
* 内容:java.util.Date=cn.itcast.converter.DateConverter

* 在jsp页面显示详细的错误信息
* 引入struts2的标签库:<%@ taglib uri="/struts-tags"   prefix="s"%>
* 使用<s:fielderror/>标签显示错误信息
* struts2的转化错误类型拦截器,把错误信息放置到一个集合中
* <s:fielderror/>遍历集合,打印错误信息

*  默认的显示错误的信息是英文的,该信息在xwork-core-2.1.6.jar/com\opensymphony\xwork2下的
xwork-messages.properties文件中
xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".
{0}:Action中的属性:jsp页面的值转化为action中的属性

* 修改错误信息为中文
* 在与action同级的目录(其他目录也可)创建*.properties文件,文件的名称自定义,后缀名是.properties
* 本例为 converter.properties
* 增加如下内容
* 增加默认的提示(对所有的action中的属性都有效)
xwork.default.invalid.fieldvalue=类型转化  出现了错误 "{0}".

* 增加具体的对action中每个属性的提示:
* 格式:invalid.fieldvalue.xxx=提示信息
xxx:表示action中的属性名称
* 本例:invalid.fieldvalue.createTime=转化createTime属性时出现了异常

*  具体的要覆盖默认的

* 加载自定义的国际化资源文件
* 配置加载自定义的国际化资源文件
* cn.itcast.converter.converter:加载cn.itcast.converter.converter.properties资源文件
* 在struts.xml文件中增加如下内容
<constant name="struts.custom.i18n.resources"
value="cn.itcast.converter.converter"></constant>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: