2011-05-08 234 views
0

我有一個字段使用日期/時間選擇器生成隱藏字段的表格,其日期爲&時間爲英國格式dd/MM/yy HH:mm通過使用的JavaScript。這被提交給一個struts2的操作,這個操作使用java.util.Date來獲取字段的getters &。Struts2日期解析

在JSP:

<s:form> 

    ... 
    <input type="hidden" name="myDate" value="08/05/11 16:00" /> 
    <s:submit /> 

</s:form> 

在操作

public class MyAction 
{ 

    public void setMyDate(Date d) 
    { 
     this.d = d; 
    } 

    public Date getMyDate() 
    { 
     return d; 
    } 

} 

正如預期的那樣在Firefox中,當我提交表單自動支柱解析日期和我結束了在動作Date對象用正確的日期。

然而,在谷歌瀏覽器,當我提交表單的日期被解析,就好像它是在美國的格式MM/DD/YY HH:MM,結果我得到的8月5日5月8日,而不是。

檢查兩個瀏覽器發送的HTTP頭信息,儘管我的操作系統語言設置爲en_GB谷歌瀏覽器仍然發送'接受語言'標頭作爲en_US,這意味着struts必須使用此來確定使用什麼日期格式。

我只能假設這是谷歌瀏覽器中的一個錯誤,但鑑於我沒有自由修復谷歌瀏覽器在Struts 2中有一種方法,我可以指定一個固定的日期格式,它告訴Struts格式它應該用來解析表單參數中的日期?

+0

您是否嘗試過使用設置爲所需的郎'request_locale'參數?該參數設置會話變量'WW_TRANS_I18N_LOCALE',並且對於我的應用程序,它將覆蓋'Accept-Language'設置語言。希望它可以幫助... http://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/interceptor/I18nInterceptor.html – 2011-09-13 15:34:08

回答

0

爲了避免錯誤解釋由不同的Locale值引起的日期,我將使用明確且明確的表示日期和時間的方法。這是標準涵蓋的內容。

不幸的是,我不認爲Struts2的轉換可以考慮到本表示「開箱即用」 Date。對於日期轉換,默認情況下,Struts2 uses the SHORT format for the Locale associated with the current request

我想你可以嘗試發現,已轉換ISO 8601點的日期或簡單的方法也只是以write your own插件。

+0

我已經與創建ISO標準的自定義類型轉換器,它有點令人失望的struts不允許你指定一個明確的格式,但TypeConverter解決了我的問題。 – 3urdoch 2011-05-08 21:14:43

0

我建議使用Joda Time API.它完全支持ISO 8601 standard和有語言環境,時區,轉換等,我用它來進行所有的日期 - 時間操作在所有我的應用程序的廣泛API(包括Struts 2的)。