2017-10-11 173 views
-1

我其實有兩個問題。兩者都發生在相同的情況下,如下所示:春天轉換成表格支持bean

我正在與春天和thymeleaf,我想發佈一個窗體到服務器,這工作正常,但服務器無法轉換一些submited數據到我的bean屬性的類型。

形式:

<form th:action="@{/demo}}" 
     th:object="${myBean}" method="post"> 
      <label>date</label> 
      <input type="date" th:field="*{date}"> 
      <label>type</label> 
      <select th:filed="*{type}"> 
       <option th:each="type: ${types}" 
        th:value="${type.id}" th:text="${type.name}"</option> 
      </select> 
     <button type="submit">Submit</button> 
    </form> 

的的BeanDefinition:

@lombok.Data 
public class MyBean{ 
    private ZonedDateTime date; 
    private MyType type; 
} 

問題:

  1. 日期輸入的值不能轉化爲java.time.ZonedDateTime
  2. select(它將作爲數字發佈)的值ca n不能轉換爲MyType類型的對象。我會推測這是因爲MyType是一個JPA實體,併爲其定義了一個org.springframework.data.repository.CrudRepository

如果你們中的任何一位能幫助我,我會很高興。

回答

0

我自己解決了它。

日期輸入的值是以字符串形式發送的,即「2017-12-31」爲了能夠在我的表單支持bean中使用ZonedDateTime,我必須註冊一個自定義轉換器。這裏是代碼:

public class ZonedDateTimeConverter implements Converter<String, ZonedDateTime> { 
@Override 
public ZonedDateTime convert(String source) { 
    return ZonedDateTime.of(LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd")), LocalTime.of(00, 00), 
      ZoneId.systemDefault()); 
} 

}

,並在WebMvcConfigurer我用它註冊:

@Override 
public void addFormatters(FormatterRegistry registry) { 
    registry.addConverter(new ZonedDateTimeConverter()); 
} 

對於第二個問題的解決辦法是更簡單的,我唯一佩服做的是用@EnableSpringDataWebSupport註釋我的應用程序,然後我的實體豆註冊一些轉換器