2013-03-05 4 views
5

ich ein Formular mit dem select-Tag verwendet erschaffe, die wie folgt aussieht:‚select‘ Tag mit Entitäten in Thymeleaf

<form th:object="${version}" method="post" class="form-horizontal"> 
    ... 
    <div class="control-group" th:classappend="${#fields.hasErrors('product')} ? 'error'"> 
     <label class="control-label" for="product" th:text="#{version.product}">Product</label> 
     <div class="controls"> 
      <select id="product" th:field="*{product}"> 
       <option value="" th:text="#{common.select.prompt}"></option> 
       <option th:each="p : ${productList}" th:value="${p.id}" th:text="${p.name}"></option> 
      </select> 
      <span class="help-inline" th:errors="*{product}"></span> 
     </div> 
    </div> 
    ... 
</form> 

DomainClassConverter Klasse von Spring Data JPA hilft Auto-convert ausgewählt id auf die Entität Product, wenn ich Übermitteln Sie das Formular. Die product sollte auch nicht null sein (I @NotNull auf das product Feld in der Version Klasse bin mit

Das Problem, das ich habe -. Wenn ich wieder kommen, um die Daten zu bearbeiten, wird die Product nicht ausgewählt

. wenn ich die select wie folgt aus (th:field und th:errors) ändern: <-- p.s. is not a sad smile

  <select id="product" th:field="*{product.id}"> 
       <option value="" th:text="#{common.select.prompt}"></option> 
       <option th:each="p : ${productList}" th:value="${p.id}" th:text="${p.name}"></option> 
      </select> 
      <span class="help-inline" th:errors="*{product.id}"></span> 

dann wird es ausgewählt, wenn ich wieder kommen, um es zu bearbeiten, aber der Prüfer nicht funktioniert (product wird immer instanziiert, selbst wenn die ausgewählte ID null ist.

Es sieht aus wie ein sehr häufiges Szenario (Auswahl einer Entität aus der Liste), aber ich kann kein gutes Beispiel finden. Bitte teilen Sie das geheime Wissen.

+0

Was meinst du mit kommen zurück, um es zu bearbeiten? –

+0

Ich benutze die gleiche Seite zum Erstellen und Bearbeiten der Versionsentität –

Antwort

2

Gelöst. Das Problem bestand, weil ich die Methoden equals() und hashCode() nicht außer Kraft gesetzt hatte.