XMLGregorianCalendarフィールドを持つモデルオブジェクトがあります。どうすれば入力フィールドにバインドできますか?
私が使用している文字列フィールドの場合:
#springFormInput("model.object.stringfield" "")
しかし、XMLGregorianCalendarの対応するコードを理解することはできません
XMLGregorianCalendarフィールドを持つモデルオブジェクトがあります。どうすれば入力フィールドにバインドできますか?
私が使用している文字列フィールドの場合:
#springFormInput("model.object.stringfield" "")
しかし、XMLGregorianCalendarの対応するコードを理解することはできません
XMLGregorianCalendarを、プレゼンテーション層に渡す前に、カレンダーや日付などの扱いやすいものに変換した方がよい場合があります。
これが解決策です。jodatimeを使用しますが、おそらく次のように変更することはできません。
ビュー(この場合は速度)の場合:
#springFormInput("model.object.xmlgregoriancalendar.field" "")
コントローラの場合:
@InitBinder
public void binder(WebDataBinder binder) {
binder.registerCustomEditor(XMLGregorianCalendar.class, new PropertyEditorSupport() {
public void setAsText(String value) {
setValue(createXMLGregorianCalendar(value));
}
public String getAsText() {
return new SimpleDateFormat("dd/MM/yyyy").format(((XMLGregorianCalendar)getValue()).toGregorianCalendar().getTime());
}
});
}
private XMLGregorianCalendar createXMLGregorianCalendar(String date) {
LocalDateTime result = DateTimeFormat.forPattern("dd/MM/yyyy").parseDateTime(date).toLocalDateTime();
return xmlDF().newXMLGregorianCalendar(result.toDateTime().toGregorianCalendar());
}
private static DatatypeFactory xmlDF() {
try {
return DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException ex) {
throw new RuntimeException(ex);
}
}