Grails GORM & Enums
Ich habe ein problem mit der Enumeration in Grails:
Ich benutze ein enumeraion in eine grails domain-Objekt
code:
package it.xxx.tools.kanban
import java.util.Date;
class Task {
String name
String description
Priority priority
static belongsTo = [user:User, project:Project]
static constraints = {
name(nullable:false, maxSize:25)
description(nullable:false, maxSize:1500)
priority(nullable:true)
}
}
package it.xxx.tools.kanban;
public enum Priority {
VERY_LOW("Very Low"),
LOW("Low"),
MEDIUM("Medium"),
HIGH("High"),
VERY_HIGH("Very High")
private final String value
Priority(String value){
this.value = value;
}
String toString() {
value
}
String getKey() {
name()
}
static list(){
[VERY_LOW, LOW, MEDIUM, HIGH, VERY_HIGH]
}
}
<tr class="prop">
<td valign="top" class="name">
<label for="priority">Priority:</label>
</td>
<td valign="top" class="value ${hasErrors(bean:taskInstance,field:'priority','errors')}">
<g:select from="${it.weservice.tools.kanban.Priority?.values()}" value="${taskInstance?.priority}" name="priority" noSelection="['':'']"></g:select>
</td>
</tr>
Ich die grails generate-Befehl alle
Wenn ich versuche zu speichern, die über die web-Anwendung, die Task-Objekt habe ich die folgende Fehlermeldung:
Failed to convert property value of type [java.lang.String] to required type [it.weservice.tools.kanban.Priority] for property priority; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [it.weservice.tools.kanban.Priority] for property priority: no matching editors or conversion strategy found
- Welche version von Grails benutzt du?
- Ich bin mit grails 1.1.1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich beantworte meine eigene Frage, weil andere Benutzer finden es nützlich:
ich habe in der grails-Tipps für enums hier (unten auf der Seite)
In meiner Implementierung habe ich vergessen die optionKey="key" in der g:wählen Sie tag
Hinzufügen, dass alle woked reibungslos
Müssen Sie zum ändern der Ansicht, zum Beispiel hinzufügen
optionValue="value"
auf der wählen Sie in der erstellen.gsp.Brauchen Sie nicht:
Yo brauchen, um eine
getValue()
, so ändernprivate final String value
zufinal String value
.Mehr info (in Spanisch): http://thewhitehatsolution.wordpress.com/
Wenn Sie mit scaffold = true in Ihrem controller, dann können Sie auch ändern Sie die Vorlage, erzeugt die select-tags in den Ansichten durch die Bearbeitung der renderEditor.template-Datei. Um dies zu tun :