2013-12-17 3 views
1

Struts2에서 StringDate으로 변환하는 방법을 궁금합니다. 사용자가이 형식의 날짜를 제공하는 간단한 양식이 있습니다 "yyyy-MM-dd". 제출시 Sturts2 맵은 콩에 매핑됩니다. 날짜 변환 오류가 있습니다. 나는 그것을 Google이 많이하고 모든 곳에서 우리가 이것을 위해 사용자 정의 형식 변환기를 사용해야한다고 명시되어있다. 나는 날짜 변환을위한 사용자 정의 유형 변환기를 작성하고 싶지 않습니다. 데이터 변환은 매우 일반적인 기능이므로 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 
} 

액션 클래스

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 Type Conversion

는 타입 변환 지원 내장

,536,

유형 변환은 XWork에서 구현됩니다.

XWork는 에 대한 가장 일반적인 유형 변환을 자동으로 처리합니다. 이는 다음의 각 을위한 캐릭터 라인과의 변환에 대한 지원이 포함되어 : 긴,

문자열
부울/부울
문자/문자
INT/정수, 플로트/플로트/롱을
더블/더블 날짜 - 현재 요청과 연관된 로케일에 대해 SHORT 형식을 사용합니다.
배열 - 개별 문자열을 개별 항목에 적용 할 수 있다고 가정하면
콜렉션 - 객체 유형을 결정할 수없는 경우 문자열로 간주됩니다. 및 새로운 ArrayL IST는 JAVA에서

SHORT format

을 만들어 :

Style  U.S. Locale French Locale 

SHORT  6/30/09  30/06/09 

이 이미 작동하는 것을 의미하지만 SHORT 형식으로, 그리고 그것을 구성 할 수 없습니다. 시도 해봐.

그런 다음 당신은 그것을 전송하기 전에 몇 가지 자바 스크립트 해킹 값 클라이언트 측을 변경하거나 복사 this small converter 붙여 넣기, 또는의 jQuery있는 DateTimePicker (권장)를 사용하고, 유일한 문제는 멋진 :

인 테마가 될 것입니다 수 있습니다


편집은 일부 암호화 코멘트 후, 나는 시도하고 분명 그것은 문서화 상태 같아요.로케일 인 경우

  • (예.) en_US, 당신은 형식 MM/dd/yy의 문자열 데이터를 전송해야합니다.
  • 로케일이 (예 : it_IT) 인 경우 dd/MM/yy 형식의 문자열 데이터를 보내야합니다.
  • 로케일 en_US으로 dd/MM/yy을 입력하면 유효성 검사 오류 및 입력 결과가 표시됩니다.
  • / 대신 -을 사용하면 동일한 오류가 발생합니다.
  • 날짜를 다른 형식으로 입력하면 (예 : dd/MM/yyyy (SHORT와는 다르지만 Locale에 적합) 날짜가 올바르게 동일하게 설정됩니다.
  • 서식을 지정하지 않고 JSP에서 활동 날짜를 읽으면 활동 날짜가 항상 짧게 표시됩니다.

그 다음으로는 날짜를 수동으로 사용자의 입력을 할 필요가 있다면, 예. (당신의 로케일에 적합한 형식을 존중하는

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

을 사용자에게 또는 자바 스크립트를 통해 변경, 위 말했다 삽입 한 후 또는 사용자 지정 변환기를 사용하십시오.

+0

struts는 날짜와 시간을 동시에 변환 할 수 있습니까? 예 : '30/06/09 07:03 ' –

+0

답변으로 인해 질문을해야합니다. TL, DR 예 –