0

我在将输入请求参数(当然是字符串类型)处理为java.util.Date. 我认为添加到我的 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)

由于返回 getter 和接受 setter 参数类型不匹配,此代码无法工作的 struts 1 形式的基本原理是什么?我怎么解决这个问题 ?我根本不想让方法命名为 likesetStringDate(String stringDate(){...}并在每个页面上思考我应该调用哪个方法:(

4

2 回答 2

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对象。

于 2011-11-14T07:21:59.723 回答
0

据我所知,我认为重载的方法在表单 bean 中效果不佳。尝试以不同的方式命名这两种方法,我认为你会有更好的运气。

于 2011-11-14T07:06:31.940 回答