2017-09-29 1 views
0

Was mache ich hier falsch?Fehler beim Konvertieren des Eigenschaftswerts vom Typ 'java.lang.String'

     <select th:field="*{role}"> 
          <option value="#" disabled = "disabled" selected="selected">Role...</option> 
          <option th:each="r : ${roles}" th:value="${r}" th:text="${r.name}">Developer</option> 
         </select>``` 

Ich erhalte diese Fehlermeldung:

Field error in object 'collaborator' on field 'role': rejected value [33]; codes [typeMismatch.collaborator.role,typeMismatch.role,typeMismatch.com.imprender.instateam.model.Role,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [collaborator.role,role]; arguments []; default message [role]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.imprender.instateam.model.Role' for property 'role'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.imprender.instateam.model.Role' for property 'role': no matching editors or conversion strategy found]

Dort heißt es:

Failed to convert property value of type 'java.lang.String' to required type 'com.imprender.instateam.model.Role' for property 'role'

aber ich verstehe nicht, wo ich das tue.

Ich denke, ich bin nicht richtig übertragen den Wert ausgewählt in der. Ich dachte, das Objekt wäre das, das in der Option value deklariert wurde, die ausgewählt wird, aber offensichtlich habe ich es falsch verstanden und kann den Weg nicht finden, es richtig zu machen.

Das Modell:

package com.imprender.instateam.model; 

import javax.persistence.*; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Pattern; 

@Entity 
public class Collaborator { 

    @Id 
    //Todo: check strategy 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @NotNull 
    @Pattern(regexp = "([A-Z][a-zA-Z]*\\s*)+") 
    private String name; 

    //Todo: check, do we want to create a new table to associate values? 

    @NotNull 
    @ManyToOne 
    private Role role; 

    public Collaborator() { 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Role getRole() { 
     return role; 
    } 

    public void setRole(Role role) { 
     this.role = role; 
    } 
} 
+0

Sie bitte eine der duplizierten Fragen ändern oder entfernen Sie erstellt haben, entweder diese Frage oder [diese one] (https://stackoverflow.com/questions/46491380/failed-to-convert-property -value-of-type-java-lang-string-to-required-type-c) – juanlumn

+0

Könnten Sie uns weitere Informationen geben? wie das Modell, das du rendern willst ... – juanlumn

+0

Fertig! Ich dachte, dass der andere nicht veröffentlicht wurde, danke :) – Ric

Antwort

1

Ihr Problem ist, dass in Ihrer select sagt das Feld ist eine Rolle, Entitätstyp Rolle, aber in Ihrer Option der Wert ist eine ID, einiger Grundwert, dann Spiel tut. Sie können auf diese

<select th:field="*{role.id}"> 
    <option value="#" disabled = "disabled" selected="selected">Role...</option> 
    <option th:each="r : ${roles}" th:value="${r.id}" th:text="${r.name}">Developer</option> 
</select> 
+0

Okey ... Ich habe gerade deine Änderung gemacht und es funktioniert! Aber ich würde gerne wissen ... warum ?? Das Feld des gebundenen Objekts war eine Rolle, kein String, warum kann ich das stattdessen durch eine ID ersetzen und es funktioniert? – Ric

+0

Ich meine, das 'th: file = {* role.id}' ist ein Feld eines gebundenen Objekts vom Typ 'Collaborator' Und das Feld ist eine Rolle, kein Long (die Rollen-ID ist ein Long), Wie kann das funktionieren? Bei der Arbeit mit gebundenen Objekt in Thymeleaf ... sollten wir die ID anstelle des gesamten Objekts verwenden? – Ric

+0

Die ID Ihrer Optionen muss ein primitives Objekt oder eine Enumeration sein, aber mit einem Objekt könnten Sie Probleme haben, und nicht sicher, ob es auch funktionieren würde – cralfaro

Verwandte Themen