我想以特定格式(yyyy / MM / dd HH:mm)将LocalDateTime对象传递给thymeleaf,然后将其接收回我的控制器类。 我想使用customEditor / initbinder进行转换。
/**
* Custom Initbinder makes LocalDateTime working with javascript
*/
@InitBinder
public void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
binder.registerCustomEditor(LocalDateTime.class, "reservationtime", new LocalDateTimeEditor());
}
public class LocalDateTimeEditor extends PropertyEditorSupport {
// Converts a String to a LocalDateTime (when submitting form)
@Override
public void setAsText(String text) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
LocalDateTime localDateTime = LocalDateTime.parse(text, formatter);
this.setValue(localDateTime);
}
// Converts a LocalDateTime to a String (when displaying form)
@Override
public String getAsText() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
String time = ((LocalDateTime)getValue()).format(formatter);
return time;
}
}
虽然spring在从表单接收数据时使用了我的initbinder,但是thymeleaf似乎更喜欢我的initbinder上的.toString()方法而且我的getAsText()方法永远不会被调用。
我的观点:
<input type="text" th:name="${reservationtime}" id="reservationtime" class="form-control"
th:value="${reservationtime}"/>
我找到了启动器&#34;方式&#34;在代码可读性方面相当不错。所以我想继续使用initbinder。有可能告诉百里香使用我的启动器或任何其他好的解决方法吗?
答案 0 :(得分:0)
删除参数“reservationtime”,可以解决问题:
binder.registerCustomEditor(LocalDateTime.class, new LocalDateTimeEditor());
然后,转换器将用于所有LocalDateTime字段