在Struts中如何处理ActionForm中包含日期类型属性的情况

03-10-15 sparkguest
JSP定义
<_input name="loginDate" type="text" class="line" id="loginDate">

ActionForm中定义
public class LoginForm extends ActionForm{
private Date loginDate = null;
public Date getLoginDate() {
...

然后运行时报错
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.struts.util.PropertyUtils.setSimpleProperty(PropertyUtils.java:988)
at org.apache.struts.util.PropertyUtils.setNestedProperty(PropertyUtils.java:904)
at org.apache.struts.util.PropertyUtils.setProperty(PropertyUtils.java:932)
at org.apache.struts.util.BeanUtils.populate(BeanUtils.java:509)
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:772)
at org.apache.struts.action.ActionServlet.processPopulate(ActionServlet.java:2061)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1564)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:165)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
at com.caucho.server.http.Invocation.service(Invocation.java:312)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:221)
at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:163)
at com.caucho.server.TcpConnection.run(TcpConnection.java:137)
at java.lang.Thread.run(Thread.java:536)

应该是JSP中的TEXT与ActionForm中的日期型属性转换错误了,请问大家是如何这种问题的

yehs220
2003-10-16 09:11
ActionForm中用java.sql.Date试试

raynix
2003-10-16 09:23
Sting不能直接cast成Date。

sparkguest
2003-10-16 10:05
我知道String不可直接Cast为日期,我是想问这种问题如何解决

raynix
2003-10-16 10:42
我的方法可能比较笨:

将y,m,d分别读入,然后用Calendar或者SimpleDateFormat校验、转换。

you.cai
2003-10-16 11:32
actionform中最好只用string类型,使用日期,需要自己来完成转化。
你可以使用struts提供验证功能来保证日期正确。

sparkguest
2003-10-16 11:38
有没办法将Struts的转换过程修改一下

you.cai
2003-10-16 12:01
他利用的是beantutitly(好像是这么拼的),估计很难改。你的formbean总要变成bean的,你可以在bean里面作吗
bean.setDate(String date){
//转化代码吗
}

yehs220
2003-10-16 16:06
我在ActionForm(DynaValidateForm)中用java.sql.Date是可以的,用java.util.Date出同样的错误。

yehs220
2003-10-16 16:08
传过来的参数格式为yyyy-MM-dd

firstrainbow
2003-11-18 12:35
记得有本书上说ActionForm 的属性最好都是String类型,因为struts populate ActionForm的时候是从request的parameter中寻找和actionform的属性相匹配的然后填充,不知道我的理解对不对?
另外,如果要传送不定个数个参数,该怎么处理?

刑满释放一周年
2003-11-19 11:30
formbea里的properties最后都是String类型,不要犹豫了,否则会有很多麻烦.