1、实现TypeConverter接口,实现
convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object target, java.lang.reflect.Member member, java.lang.String propertyName, java.lang.Object value, java.lang.Class toType)
2、继承DefaultTypeConverter类,覆写
convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object value, java.lang.Class toType)
3、继承StrutsTypeConverter,覆写
//请求封装 convertFromString(java.util.Map context, java.lang.String[] values, java.lang.Class toClass) //数据回显 convertToString(java.util.Map context, java.lang.Object o)
类型转换是双向,请求<--->回显,一继承DefaultTypeConverter类为例,写一个日期类型的转换器
jsp
<form action="${pageContext.request.contextPath }/demo05/param6.action" method="post"> 日期<input type="text" name="date" /><br/> <input type="submit" value="提交" /> </form>
action
public class ParamAction6 extends ActionSupport { private Date date; @Override public String execute() throws Exception { System.out.println(date); return NONE; } public Date getDate() { return this.date; } public void setDate(Date date) { this.date = date; } }
转换器
public class DateConvert extends DefaultTypeConverter { @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 请求参数封装 if (Date.class == toType) { String[] val = (String[]) value; String dateVal = val[0]; try { return dateFormat.parse(dateVal); } catch (ParseException e) { e.printStackTrace(); } } else { // 回显数据封装 Date date = (Date) value; return dateFormat.format(date); } return null; } }
struts配置
<action name="param6" class="demo05.ParamAction6"> </action>
注册转换器
1、局部注册,针对特定属性,在action所在包装件“ParamAction6-conversion.properties”文件,“Action类名+-conversion.properties”,内容为
date = demo05.DateConvert
date为Action中的属性名,转换器只在本Action有效
2、全局注册,针对特定类型,在src下创建“xwork-conversion.properties”,内容为
java.util.Date = demo05.DateConvert
这种方式针对所有java.util.Date类型都有效
类型转换中的错误处理流程
在Action中抛出异常
public class DateConvert extends DefaultTypeConverter { @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 请求参数封装 if (Date.class == toType) { String[] val = (String[]) value; String dateVal = val[0]; try { return dateFormat.parse(dateVal); } catch (ParseException e) { throw new RuntimeException(e); } } else { // 回显数据封装 Date date = (Date) value; return dateFormat.format(date); } } }
jsp
<%@ taglib uri="/struts-tags" prefix="s"%> <s:fielderror></s:fielderror> <form action="${pageContext.request.contextPath }/demo05/param6.action" method="post"> 日期<input type="text" name="date" /><br/> <input type="submit" value="提交" /> </form>
配置
<action name="param6" class="demo05.ParamAction6"> <result name="input">/demo05/params.jsp</result> </action>
这是页面出现的错误信息为英文,通过设置properties文件,将错误信息转换为中文,创建“ParamAction6.properties”,Action类名.properties,内容为invalid.fieldvalue.属性名= 错误信息
invalid.fieldvalue.date =格式为年-月-日
properties中不能有中文需要转码
相关推荐
7.3.1 对自定义的类型转换器进行配置 126 7.3.2 自定义的类型转换器示例 127 7.4 扩展StrutsTypeConverter类 130 7.5 与复杂对象配合使用 134 7.6 与Collection配合使用 137 7.7 与Map配合使用 142 7.8 小结 145 第...
第20章 数据格式转换(Struts 2.X+Hibernate+Dom4j) 第21章 用户维护功能(Struts 2.X+iBATIS) 第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2....
表现层框架struts 2:讲解struts 2的入门配置、核心组件、标签库、国际化、数据校验、转换器、拦截器,并分别实现与hibernate、ibatis持久层框架的集成开发。 业务层框架spring:讲解spring的入门配置与ioc容器...
表现层框架struts 2:讲解struts 2的入门配置、核心组件、标签库、国际化、数据校验、转换器、拦截器,并分别实现与hibernate、ibatis持久层框架的集成开发。 业务层框架spring:讲解spring的入门配置与ioc容器...
第20章 数据格式转换(Struts 2.X+Hibernate+Dom4j) 第21章 用户维护功能(Struts 2.X+iBATIS) 第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2....
第20章 数据格式转换(Struts 2.X+Hibernate+Dom4j) 第21章 用户维护功能(Struts 2.X+iBATIS) 第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2....
第20章 数据格式转换(Struts 2.X+Hibernate+Dom4j) 第21章 用户维护功能(Struts 2.X+iBATIS) 第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2....
表现层框架struts 2:讲解struts 2的入门配置、核心组件、标签库、国际化、数据校验、转换器、拦截器,并分别实现与hibernate、ibatis持久层框架的集成开发。 业务层框架spring:讲解spring的入门配置与ioc容器...
18.4.5 查询结果转换器 18.5 查询性能优化 18.5.1 iterate()方法 18.5.2 查询缓存 18.6 小结 18.7 思考题 第19章 Hibernate高级配置 19.1 配置数据库连接池 19.1.1 使用默认的数据库连接池 19.1.2...
18.4.5 查询结果转换器 18.5 查询性能优化 18.5.1 iterate()方法 18.5.2 查询缓存 18.6 小结 18.7 思考题 第19章 Hibernate高级配置 19.1 配置数据库连接池 19.1.1 使用默认的数据库连接池 19.1.2...
18.4.5 查询结果转换器 18.5 查询性能优化 18.5.1 iterate()方法 18.5.2 查询缓存 18.6 小结 18.7 思考题 第19章 Hibernate高级配置 19.1 配置数据库连接池 19.1.1 使用默认的数据库连接池 19.1.2...
18.4.5 查询结果转换器 18.5 查询性能优化 18.5.1 iterate()方法 18.5.2 查询缓存 18.6 小结 18.7 思考题 第19章 Hibernate高级配置 19.1 配置数据库连接池 19.1.1 使用默认的数据库连接池 19.1.2...
16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...
6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...
16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...
8.3.3 关联转换器与UI Component实例 8.3.4 转换器的生命周期 8.3.5 定制转换器 8.4 Faces验证系统 8.4.1 Long Range Validator 8.4.2 Double Range Validator 8.4.3 Length Validator 8.4.4 必需的工具Required ...
第5章 进化式需求 5.1 定义:需求 5.2 进化式需求与瀑布式需求 5.3 寻找需求可以采用的方法 5.4 需求的类型和种类 5.5 UP制品如何组织需求 5.6 本书是否包含这些制品的示例 5.7 参考资料 第6章 用例 6.1 ...