2017-10-11 8 views
-1

J'ai en fait deux questions. Les deux se produisent dans la même situation, qui est la suivante:Spring Conversion en fève de forme

Je travaille avec spring et thymeleaf et je veux poster un formulaire sur le serveur, qui fonctionne bien, mais le serveur ne peut pas convertir certains des des données aux types d'attributs de mon bean.

La forme:

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

Le beandefinition:

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

Problèmes:

  1. la valeur de la date d'entrée ne peut pas être converti en java.time.ZonedDateTime
  2. la valeur de la sélection (qui sera affichée sous forme de nombre) ca n ne pas être converti en un objet de type MyType. Ce que j'aurais expexé parce que MyType est une entité JPA et a un org.springframework.data.repository.CrudRepository défini pour cela.

Je serais ravi si l'un de vous pourrait m'aider.

Répondre

0

Je l'ai résolu seul. La valeur de Date-Input est envoyée en tant que chaîne, c'est-à-dire "2017-12-31" pour pouvoir utiliser un ZonedDateTime dans mon bean de support de formulaire. J'ai dû enregistrer un convertisseur personnalisé. Voici le code:

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()); 
} 

}

et dans le WebMvcConfigurer je me suis inscrit avec:

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

Pour le deuxième problème, la solution est encore plus simple, la seule chose que je main à faire est d'annoter ma demande avec @EnableSpringDataWebSupport qui à son tour enregistré quelques convertisseurs pour mon entité-haricots