2013-12-17 83 views
1

我想知道如何在Struts2中將String轉換爲Date。我有一個簡單的表格,用戶在這種格式下提供這種格式的日期"yyyy-MM-dd"。將Sturts2地圖表單提交給bean。我在日期轉換中出錯。我谷歌它很多,每一個地方,我們必須使用自定義類型轉換器。我不想爲日期轉換編寫自定義類型轉換器。我認爲在Struts2中應該有一個簡單的數據轉換機制,因爲數據轉換是非常常見的功能。Struts2中的日期轉換

JSP

<s:form action="AddDomain"> 
    <s:push value="idp"> 
     <s:textfield name="domainName"   label="Domain Name" /> 
     <s:textfield name="url"    label="Domain URL" /> 
     <s:textfield name="noOfLicense"  label="License Purchased" /> 

     <s:textfield name="licenseExpireDate" label="License Expire Date" 
               title="YYYY-MM-DD like 2013-01-21" /> 

     <s:textfield name="userActiveDuration" label="Active User Duration" 
               title="please mention in days" /> 

     <s:textarea name="notes"    label="Note" cols="30" rows="5" ></s:textarea> 

     <s:submit value="Add" /> 
    </s:push> 
</s:form> 

這是JSP如果用戶輸入的輸入。

模型類

@Entity 
@Table(name = "Domain") 
public class IdentityProvider implements Serializable { 

    @Id 
    @Basic(optional = false) 
    private String url; 
    private String domainName; 
    private int noOfLicense; 
    private int userActiveDuration; 
    private int activeUsers; 
    private Date licenseExpireDate; 
    private String notes; 

    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private String domainIdCode; 

    public IdentityProvider(String name, String url, int nol, int time,Date d,String notes) { 
     this.setDomainName(name); 
     this.setUrl(url); 
     this.setNoOfLicense(nol); 
     this.setUserActiveDuration(time); 
     this.setLicenseExpireDate(d); 
     this.setNotes(notes); 
    } 

    public IdentityProvider() { 

    } 

    // Getter Setter 
} 

Action類

public class DomainManagementAction extends ActionSupport 
           implements ModelDriven<IdentityProvider> { 

    private IdentityProvider idp = new IdentityProvider(); 

    public IdentityProvider getIdp() { 
     return idp; 
    } 

    public void setIdp(IdentityProvider idp) { 
     this.idp = idp; 
    } 

    public String saveDomain() { 
     IDPBroker broker = new IDPBroker(); 
     broker.saveDomain(idp); 
     return ActionSupport.SUCCESS; 
    } 


    @Override 
    public IdentityProvider getModel() { 
     // TODO Auto-generated method stub 
     return idp; 
    } 

} 

回答

7

​​Struts2的

內置類型轉換支持

類型轉換由XWork實現。

XWork會自動處理您最常見的類型轉換爲 。這包括用於將與字符串以下的各 支持:

字符串
布爾/布爾
炭/字符
INT /整型,浮點型/浮動,長/龍,雙/雙
日期 - 使用與當前請求關聯的語言環境的短格式
數組 - 假設單個字符串可以轉換爲單個項目
集合 - 如果不能確定對象類型,則假定爲字符串和一個新的ArrayL IST是創建

SHORT format在JAVA:

Style  U.S. Locale French Locale 

SHORT  6/30/09  30/06/09 

這意味着它已經工作,但只在短格式,它是不可配置。嘗試一下。

然後你可以用一些JavaScript黑客改變價值客戶方發送之前,或複製和粘貼this small converter,或使用一個jQuery的DateTimePicker(推薦),你唯一的問題將是其主題是最酷的:)


編輯

一些加密評論後,我已經試過,顯然它就像單證狀態。

  • 如果您的語言環境是(例如)en_US,則需要發送格式爲MM/dd/yy的字符串數據。
  • 如果您的區域設置是(例如)it_IT,則需要發送格式爲dd/MM/yy的字符串數據。
  • 如果您輸入dd/MM/yyen_US區域設置,您將收到驗證錯誤和INPUT結果。
  • 如果您嘗試使用-而不是/,則它會失敗。
  • 如果以其他格式輸入日期,例如。 dd/MM/yyyy(與SHORT不同,但適用於您的區域設置),您的日期將被正確設置爲相同。
  • 如果您在JSP中讀取Action日期而未格式化它,它將始終顯示爲SHORT。

然後,就像上面說,如果你需要的日期手動讓用戶輸入,告訴用戶要尊重正確的格式爲您的語言環境(如

<label>Input a date (dd/mm/yyyy):</label> 
<s:textfield name="aDate" /> 
<s:fielderror fieldName="aDate" /> 

或者通過JavaScript改變它插入後,或使用自定義轉換器。

+0

struts可以同時轉換日期和時間嗎?例如:'30/06/09 07:03' –

+0

您應該問這是一個問題,因爲答案是明確的。 TL; DR是的 –