基于Converter解决Struts无法处理日期类型的问题
2009-08-30 00:28
489 查看
基于Struts做应用程序开发的时候,对日期数据的处理,这个是最常见的,由于Struts默认是不支持自动将网页POST的数据自动转化成Date型数据,所以,很多程序员就直接在ActionForm当中直接使用String,然后在Action当中再进行字符串跟日期数据的处理。
那假如在ActionForm当中是使用Date类型呢?会出现什么问题?能用什么样的解决办法?我们先看一下在ActionForm当中会出现的问题先。
首先,[b]创建一个日期转换器类DateConverter.java,该类代码如下:
[/b]
注册日期转换器
自定义的日期转换工作必须先做注册才能使用,注册我们可以将其放在ActionForm当中。
使用以下代码进行注册:
ConvertUtils.register(new DateConverter(), Date.class);
进行注册
编写user_form.jsp的表单页面,user_form.jsp的代码如下
配置struts-config.xml文件,struts-config.xml文件配置如下:
那假如在ActionForm当中是使用Date类型呢?会出现什么问题?能用什么样的解决办法?我们先看一下在ActionForm当中会出现的问题先。
首先,[b]创建一个日期转换器类DateConverter.java,该类代码如下:
[/b]
package zizz.struts; import java.text.SimpleDateFormat; import org.apache.commons.beanutils.Converter; import java.util.Set; import java.util.HashSet; import java.util.Iterator; import java.text.ParseException; /** * * 日期转换对象,使用该转换器,在BaseForm当中做一下注册,系统自动地帮助字符的日期表示转换为java.util.Date对象. * @author zizz. * Create Time:2006-9-11 19:11:47. */ public class DateConverter implements Converter { /** * 日期格式化对象. */ private static SimpleDateFormat df = new SimpleDateFormat(); /** * 模式集合. */ private static Set<String> patterns = new HashSet<String>(); //注册一下日期的转换格式 static{ DateConverter.patterns.add("yyyy-MM-dd"); DateConverter.patterns.add("yyyy-MM-dd HH:mm"); DateConverter.patterns.add("yyyy-MM-dd HH:mm:ss"); DateConverter.patterns.add("yyyy/MM/dd HH:mm:ss"); } /** * 日期转换器. * @param type Class * @param value Object * return Date Object. */ public Object convert(Class type,Object value){ if(value == null){ return null; }else if(value instanceof String){ Object dateObj = null; Iterator it = patterns.iterator(); while(it.hasNext()){ try{ String pattern = (String)it.next(); df.applyPattern(pattern); dateObj = df.parse((String)value); break; }catch(ParseException ex){ //do iterator continue } } return dateObj; }else{ return null; } } }
注册日期转换器
自定义的日期转换工作必须先做注册才能使用,注册我们可以将其放在ActionForm当中。
使用以下代码进行注册:
ConvertUtils.register(new DateConverter(), Date.class);
进行注册
package zizz.struts; import java.util.Date; import org.apache.struts.action.ActionForm; import org.apache.commons.beanutils.ConvertUtils; /** * UserForm对应着提交页面的网页表单信息 * @author chen yuzhe * */ public class UserForm extends ActionForm{ static{ ConvertUtils.register(new DateConverter(), Date.class); } /** * serialVersionUID */ private static final long serialVersionUID = -742922986494711669L; private int id; private String name; private int age; private String loginId; private Date birthday; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLoginId() { return loginId; } public void setLoginId(String loginId) { this.loginId = loginId; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
编写user_form.jsp的表单页面,user_form.jsp的代码如下
<%@ page contentType="text/html; charset=GBK"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <title>用户信息表单</title> </head> <body> <div><strong>创建新用户</strong></div> <html:form action="/userSave"> <table width="50%" border="1"> <tr> <td>编号</td> <td><html:text property="id"/></td> </tr> <tr> <td>姓名</td> <td><html:text property="name" /></td> </tr> <tr> <td>登录号</td> <td><html:text property="loginId" /></td> </tr> <tr> <td>年龄</td> <td><html:text property="age" /></td> </tr> <tr> <td>生日</td> <td><html:text property="birthday" /></td> </tr> </table> <hr> <html:submit></html:submit> <html:reset></html:reset> </html:form> </body> </html>
配置struts-config.xml文件,struts-config.xml文件配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <data-sources /> <form-beans> <form-bean name="userForm" type="zizz.struts.UserForm"></form-bean> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings> <action path="/userSave" name="userForm" validate="false" scope="request" type="zizz.struts.UserSaveAction"></action> </action-mappings> <message-resources parameter="zizz.struts.ApplicationResources" /> </struts-config>
相关文章推荐
- 基于Converter解决Struts无法处理日期类型的问题
- 基于Converter解决Struts无法处理日期类型的问题(1)
- 基于Converter解决Struts无法处理日期类型的问题
- 解决"System.AccessViolationException”类型的未经处理的异常在 未知模块(IIS Worker Process 已停止工作)导致无法连接远程数据库的问题
- 解决JDBC操作数据库日期类型数据时无法精确到秒的问题
- [C#]解决第三方控件引起的"类型Universe无法解析程序集"问题
- iOS NSDecimalNumber用法 加减乘除 解决字符串转float类型不准确 结尾无法去0处理 用于货币处理
- 如何解决java.sql.Statement无法处理特殊字符以及容易被黑问题
- struts2的中文乱码处理,struts出现中文乱码怎么处理.如何解决struts的中文乱码问题?
- struts2自定义类型转换(2)基于StrutsTypeConverter
- Xcode无法安装基于ruby的插件问题的解决
- 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题
- Struts2——基于StrutsTypeConverter的类型转换
- 解决问题:由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- DIV+CSS处理DIV设置float后,父容器无法定位高度的问题解决
- sqlite查询日期类型数据时出现问题的解决方法
- 解决axis2处理java.util.Date类型对象时丢弃时间部分的问题
- SpringMVC日期类型转换问题三大处理方法归纳
- struts2日期类型转换,继承StrutsTypeConverter
- flv的mime类型(.flv文件传到服务器上就无法显示问题解决)