struts2类型转换
来源:互联网 发布:视频广告过滤大师 mac 编辑:程序博客网 时间:2024/06/11 13:44
在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>