一:Struts Form中Date类型之“argument type mismatch”错误解决方法
现象:
当输入页面中含有日期如2008-01-01时,如果Form中对于的字段为Date类型,则会出现“argument type mismatch”错误。
原因:
Struts的ActionServlet在接受到页面的请求后,会调用RequestUtils.populate方法对Form进行填值,而此方法又调用到BeanUtils.populate方法,而该方法进行填值时对不同类型的会进行转换,而默认的ActionServlet并没有注册相应的转换函数,所以会导致转换出现错误。
解决方法:
1.实现自定义的ActionServlet方法并在里面注册转换函数。
2.Form中的日期类型使用String类型,把转换动作放在Action中处理(即在Action中对Form->POJO转换时处理),可以在Action基类中注册类型转换类。
当输入页面中含有日期如2008-01-01时,如果Form中对于的字段为Date类型,则会出现“argument type mismatch”错误。
原因:
Struts的ActionServlet在接受到页面的请求后,会调用RequestUtils.populate方法对Form进行填值,而此方法又调用到BeanUtils.populate方法,而该方法进行填值时对不同类型的会进行转换,而默认的ActionServlet并没有注册相应的转换函数,所以会导致转换出现错误。
解决方法:
1.实现自定义的ActionServlet方法并在里面注册转换函数。
2.Form中的日期类型使用String类型,把转换动作放在Action中处理(即在Action中对Form->POJO转换时处理),可以在Action基类中注册类型转换类。
二:String类型和Date类型的互相转换
//STRING
到日期
public
static
java.sql.Date stringToDate(String dateStr)
{
return
java.sql.Date.valueOf(dateStr);
}
//
日期到
STRING
public
static
String dateToString(java.sql.Date datee)
{
return
datee.toString();
}
注意:
在转换的代码中定义
java.util.Date
类型的变量!
因为
java.sql.Date
类型是
java.util.Date
类型的子类。
子类可以自动赋值给父类。
三:获取当前时间
import
java.text.ParseException;
import
java.text.SimpleDateFormat;
import
java.util.Date;
import
java.util.GregorianCalendar;
public
class
DateTime {
public
static
Date getDatetime(){
SimpleDateFormat dateFormatter =
new
SimpleDateFormat(
"yyyy-MM-dd-HH:mm:ss"
);
GregorianCalendar gc=
new
GregorianCalendar();
Date date=
new
Date();;
try
{
date =dateFormatter.parse((dateFormatter.format(gc.getTime())));
}
catch
(ParseException e) {
//
TODO
Auto-generated catch block
e.printStackTrace();
}
return
date;
}
}
四:验证日期类型格式
import
java.util.Date;
import
java.util.regex.Matcher;
import
java.util.regex.Pattern;
public
class
DateV {
public
static
boolean
isValidDate(String sDate) {
String datePattern1 =
"//d{4}-//d{2}-//d{2}"
;
String datePattern2 =
"^((//d{2}(([02468][048])|([13579][26]))"
+
"[//-/s]?((((0?[13578])|(1[02]))[//-/s]?((0?[1-9])|([1-2][0-9])|"
+
"(3[01])))|(((0?[469])|(11))[//-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[//-/s]?"
+
"((0?[1-9])|([1-2][0-9])))))|(//d{2}(([02468][1235679])|([13579][01345789]))[//-/s]?("
+
"(((0?[13578])|(1[02]))[//-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[//-/s]?"
+
"((0?[1-9])|([1-2][0-9])|(30)))|(0?2[//-/s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))"
;
if
((sDate !=
null
)) {
Pattern pattern = Pattern.compile(datePattern1);
Matcher match = pattern.matcher(sDate);
if
(match.matches()) {
pattern = Pattern.compile(datePattern2);
match = pattern.matcher(sDate);
return
match.matches();
}
else
{
return
false
;
}
}
return
false
;
}
}