2011-11-14 59 views
0

我在處理輸入請求參數(當然是String類型)到java.util.Date時遇到問題。我認爲下面的代碼添加到我的豆可能會解決這個問題,但我錯了:Struts中的處理日期1 ActionForm

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(); 
    } 
} 

它拋出submiting表格後的異常:

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) 

這是根本的支柱1的形式,該代碼將不會工作,因爲返回的getter和接受setter參數類型不匹配?我怎麼解決這個問題 ?我根本不需要製作名爲setStringDate(String stringDate(){...}的方法,並在每個頁面上考慮應該調用哪種方法:(

回答

1

Date對象不能在支柱屬性爲日期格式可以(根據規範)有所不同。有些人可能有dd-MM-yyyydd-MMMM-yy

我建議有一個屬性:

private String date; 

public String getDate() { return date; } 

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

然後在您的操作中,將日期字符串轉換爲Date對象。

+0

這就是我所做的。只是想確定沒有更好的解決方案:)但仍然有趣的問題:爲什麼invoke()無法確定正確的重載方法。我不知道爲什麼struts開發者錯過了這種情況。 –

+0

這是因爲Struts無法將輸入的日期轉換爲沒有轉換模式的相應'Date'對象。 –

+0

嗯,我不是要求它解析日期。我的意思是我不明白爲什麼沒有適當的setter方法的動態調用。 RequestProcessor在請求時具有特定請求參數的字符串值。爲什麼不能選擇更適合的方法:設置...(日期)或設置...(字符串)。我不是要求解析Date,我只是想對我實現一些自然而然的Java程序員的東西:)) –

0

根據我的知識,我認爲,重載的方法在表單bean中不能很好地工作。嘗試命名這兩種方法不同,我想你將有更好的運氣。