我在处理java.util.Date
输入请求参数(当然是String类型)时遇到问题。我认为以下代码添加到我的bean可能会解决这个问题,但我错了:
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public void setDate(String dateString) {
try {
date = DateFormat.getDateInstance().parse(dateString);
} catch (ParseException e) {
date = new Date();
}
}
提交表单后抛出异常:
javax.servlet.ServletException: BeanUtils.populate org.apache.struts.util.RequestUtils.populate(RequestUtils.java:469) org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:818) java.lang.IllegalArgumentException: Cannot invoke com.epam.testapp.model.News.setDate - argument type mismatch org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1778) org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1759) org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1648) org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677)
这是struts 1形式的基础吗,由于返回getter和接受setter参数类型的不匹配,这段代码不起作用?我怎么解决这个问题 ?我根本不想制作像setStringDate(String stringDate(){...}
这样的方法,并在每个页面上思考我应该调用哪种方法:(
答案 0 :(得分:1)
日期对象不能是struts中的属性,因为日期格式可能不同(取决于规范)。有些可能有dd-MM-yyyy
,dd-MMMM-yy
等
我建议拥有一个房产:
private String date;
public String getDate() { return date; }
public void setDate(String date) { this.date = date; }
在您的操作中,将日期字符串转换为Date
对象。
答案 1 :(得分:0)
据我所知,我认为重载方法在表单bean中效果不好。尝试以不同方式命名这两种方法,我认为你会有更好的运气。