我想用ActionForm收集java.util.Data类型的数据时报错了,听人说好像有种方法可以解决,就是用一个监听器监听actionform收集data数据时让它自动完成数据转型的工作,具体如何实现呀?望高手指点
解决方案 »
- JSP页面错误后,返回保存输入的信息。
- HTTP Status 500:The server encountered an internal error () that prevented it from fulfilling this request.
- Spring问题,困扰我两天了!!!!!
- 学习J2EE的步骤?
- 为什么在Ecplise中调用jsp不能正常显示,而把文件放到tomcat下单独执行却可以?
- dl1981(磊哥)也给我一个struts开发项目的源码,我学struts,经常在黑暗里摸呀爬呀,求你也给小弟看看吧!我跪求了还不行吗!!
- tomcat与websphere
- jsp javabean tomcat sqlserver 中文编码问题
- 一个时间的问题?
- freemark的$里面需要用到el表达式,但是用了之后el表达式失效
- 定时问题,怎么执行不了呢?
- ibatis xml文件 返回类型
自定义转换器的实现步骤:
* 实现converter接口,实现convert方法
* 将实现的conerter注册,通常情况采用servlet注册
package com.bjsxt.struts;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.commons.beanutils.Converter;/**
* java.util.Date类型转换器
* @author Administrator
*
*/
public class UtilDateConverter implements Converter { public Object convert(Class type, Object value) {
System.out.println("UtilDateConverter.value=" + value);
if (value == null) {
return value;
}
if (value instanceof Date) {
return value;
}
Date d = null;
if (value instanceof String) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
d = sdf.parse((String)value);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return d;
}}
package com.bjsxt.struts;import java.util.Date;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;import org.apache.commons.beanutils.ConvertUtils;/**
* 注册java.util.date转换器
* @author Administrator
*
*/
public class UtilDateConverterInitWithServlet extends HttpServlet { @Override
public void init() throws ServletException {
System.out.println("UtilDateConverterInitWithServlet.init()");
ConvertUtils.register(new UtilDateConverter(), Date.class);
}}
web.xml:
<servlet>
<servlet-name>UtilDateConverterInitWithServlet</servlet-name>
<servlet-class>com.bjsxt.struts.UtilDateConverterInitWithServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
最好套个验证框架,然后可以用commons包中BeanUtils.copyProperties拷贝到XxxxxBean类中
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;import org.apache.commons.beanutils.Converter;
/**
*
* 日期换对使用换器在BaseForm当中做一下注册系统动地帮助字符的日期示换为java.util.Date对.
*/
public class DateConverter implements Converter {
/**
* 日期格式化对.
*/
private static SimpleDateFormat df = new SimpleDateFormat();
/**
* 模式合.
*/
private static Set patterns = new HashSet();
//注册一下日期的换格式
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;
}
}2.注册日期转换器,可以在form中增加
static{
ConvertUtils.register(new DateConverter(), Date.class);
}
如果没有要求,这就是能收到日期类型的数据进行查询什么的话,最好的方法是在sql里转化,这时候在formbean里定义的类型就是string了,这个比java.util.Date类型转换器快捷方便