2017-05-23 13 views
2

私はJodaとLocal Dateを使用しています。私は、カスタムプロパティエディタを作成し、それは"23-05-2017"のように、ビューから正しい値を受信するが、私はそれを解析しようとするとき、私は得る:プロパティエディタJoda LocalDateの例外

LocalDatePropertyEditor - Error Conversione DateTime 
java.lang.IllegalArgumentException: Invalid format: "23-05-2017" is malformed at "-05-2017" 

これは私のカスタムエディタです:

public class LocalDatePropertyEditor extends PropertyEditorSupport{ 
    private final DateTimeFormatter formatter; 

    final Logger logger = LoggerFactory.getLogger(LocalDatePropertyEditor.class); 

    public LocalDatePropertyEditor(Locale locale, MessageSource messageSource) { 
     this.formatter = DateTimeFormat.forPattern(messageSource.getMessage("dateTime_pattern", new Object[]{}, locale)); 
    } 

    public String getAsText() { 
     LocalDate value = (LocalDate) getValue(); 
     return value != null ? new LocalDate(value).toString(formatter) : ""; 
    } 

    public void setAsText(String text) throws IllegalArgumentException { 
     LocalDate val; 
     if (!text.isEmpty()){ 
      try{ 
       val = DateTimeFormat.forPattern("dd/MM/yyyy").parseLocalDate(text); 

       setValue(val); 
      }catch(Exception e){ 

       logger.error("Errore Conversione DateTime",e); 
       setValue(null); 
      } 
     }else{ 
      setValue(null); 
     } 
    } 
} 

と内部コントローラを登録しました:

@InitBinder 
    protected void initBinder(final ServletRequestDataBinder binder, final Locale locale) { 
     binder.registerCustomEditor(LocalDate.class, new LocalDatePropertyEditor(locale, messageSource)); 
    } 

どうすればこのエラーを修正できますか?

答えて

0

問題は、LocalDateを解析するために使用しているパターンにあります。

の代わりに:

val = DateTimeFormat.forPattern("dd/MM/yyyy").parseLocalDate(text); 

使用この:

val = DateTimeFormat.forPattern("dd-MM-yyyy").parseLocalDate(text); 
1

あなたの日付のフォーマットが23-05-2017であれば、あなたは間違ったパターンを使用します。 dd/MM/yyyyの代わりにdd-MM-yyyyを使用してください。

関連する問題