请教关于DynaValidatorForm的问题~

daniel_kaka 2007-09-21 12:29:33
我用struts1.3.8开发,用的是DynaValidatorForm,有下面一个
<form-bean name="roleGroupForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="roleGroup" type="com.lr.daniel.dakcardsystem.share.db.RoleGroup"/>
<form-property name="timeFrom" type="java.util.Date"/>
<form-property name="timeTo" type="java.util.Date"/>
</form-bean>
jsp页面代码:
<%
DynaValidatorForm form = (DynaValidatorForm)request.getAttribute("roleGroupForm");
String _timeFrom,_timeTo;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
if (form == null || form.get("timeFrom") == null){
Date now = new Date();
Date oneYearAgo = new Date(now.getTime()-365L*24*60*60*1000);
_timeFrom = df.format(oneYearAgo);
_timeTo = df.format(now);
}else{
_timeFrom = df.format((Date)form.get("timeFrom"));
_timeTo = df.format((Date)form.get("timeTo"));
}
%>
<tr>
<td class="labelCss">
<bean:message key="form.search.time.begin"/>
</td>
<td class="fieldCss">
<html:text styleClass="date" property="timeFrom" readonly="true" onclick="popCalendar(this)" value="<%=_timeFrom%>" />
</td>
</tr>
<tr>
<td class="labelCss">
<bean:message key="form.search.time.end"/>
</td>
<td class="fieldCss">
<html:text styleClass="date" property="timeTo" readonly="true" onclick="popCalendar(this)" value="<%=_timeTo%>" />
</td>
</tr>

现在的问题是每次提交都出现下面错误:
org.apache.commons.beanutils.ConversionException: Cannot assign value of type 'java.lang.String' to property 'timeTo' of type 'java.util.Date'
org.apache.struts.action.DynaActionForm.set(DynaActionForm.java:452)
org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1733)
org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1648)
org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677)
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1022)
org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)

不知道哪位打下遇到过没?~~
我以前用struts1.2.X开发就没出现过这种错误~
是不是struts1.3.8的问题造成的?
...全文
202 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
daniel_kaka 2007-09-24
  • 打赏
  • 举报
回复
呵呵~~

已经解决了~~
是我大意了~

具体做法如下:
1,重写RequestUtils的方法:
public static void populate(Object bean, String prefix, String suffix,
HttpServletRequest request);
在BeanUtils.populate(bean, properties)之前添加了对日期类型的处理;

2,重写了RequestProcessor的方法:
protected void processPopulate(HttpServletRequest request,
HttpServletResponse response, ActionForm form, ActionMapping mapping)
throws ServletException
把里面的对RequestUtils.populate调用改为对MyRequestUtils.populate的调用

~~~~~~~


呵呵~结分了

daniel_kaka 2007-09-21
  • 打赏
  • 举报
回复
没人遇到过类似问题吗?~~~~

整了两天了~网上搜遍了也没找到类似的问题!!!~~

zjf405 2007-09-21
  • 打赏
  • 举报
回复
以前也用过DynaValidatorForm,遇到日期类型的都是用String来处理的,你在formbean里面将日期的类型换成String试试,然后在程序里面解析一下这个字符串得到Date
String timeFrom = (String)form.get("timeFrom"); //从页面传过来的日期串应该是"yyyy-MM-dd"这样的格式吧
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(timeFrom);
试试吧,希望对你有用,^_^
daniel_kaka 2007-09-21
  • 打赏
  • 举报
回复
这个我没做任何处理~
都是DynaValidatorForm自动转换的~

我以前也是这样用的,就不会出现这样的问题~
这次把struts升级到1.3.8就出现这个问题了~
whwascrazy 2007-09-21
  • 打赏
  • 举报
回复
value转成String试试看
bushuang 2007-09-21
  • 打赏
  • 举报
回复
..
这是类型转换的问题.你要struts自动把string类型转换成Date类型 ,那么你必须要让struts知道你要将string转换成Date,你就要实现继承Converter这个接口的类,并进行注册

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧