【问题标题】:Processing Date in Struts 1 ActionFormStruts 1 ActionForm 中的处理日期
【发布时间】:2011-11-14 07:00:19
【问题描述】:

我在处理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 形式的基本原理吗?我怎么解决这个问题 ?我根本不想创建像setStringDate(String stringDate(){...} 这样命名的方法,并在每个页面上都考虑我应该调用哪个方法:(

【问题讨论】:

    标签: java string date actionform struts1


    【解决方案1】:

    日期对象不能是 struts 中的属性,因为日期格式可以变化(取决于规范)。有些可能有dd-MM-yyyydd-MMMM-yy等。

    我建议拥有一个属性:

    private String date;
    
    public String getDate() { return date; }
    
    public void setDate(String date) { this.date = date; }
    

    然后在您的操作中,将日期字符串转换为Date 对象。

    【讨论】:

    • 这就是我所做的。只是想确定没有更好的解决方案:) 但仍然很有趣的问题:为什么 invoke() 不能确定正确的重载方法。我不知道为什么 struts 开发人员会错过这个案例。
    • 这是因为 Struts 无法在没有转换模式的情况下将输入的日期转换为相应的 Date 对象。
    • 好吧,我不是要求它解析日期。我的意思是我不明白为什么没有动态调用正确的 setter 方法。在请求时 RequestProcessor 具有特定请求参数的字符串值。为什么不能选择更合适的方法:设置...(日期)或设置...(字符串)。我不是要解析日期,我只是想实现一些对我作为 Java 程序员来说很自然的东西 :))
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多