2016-04-04 4 views
0

Ich bin sehr neu zu Grails, Was ich tun möchte, ist das Laden der Daten Elemente aus Enum-Klasse in die Auswahl (Kombinationsfeld) dann erstellen Sie eine Tag-Bibliothek dafür.Wie zu verwenden und zu erstellen Tag-Bibliothek für Select (Combobox) in Grails

Tag Bibliothek Klasse

package feedback 
import imocha.project.Feedback 
import imocha.project.FeedbackType 

class FeedbackTagLib { 
    static namespace = "l" 

    def enumFeedbackType ={attrs, body -> 
     attrs.name = "type" 
     attrs.from = "${FeedbackType.values()}" 
     out << g.select(attrs.name, attrs.from, attrs.value, attrs.optionKey) 
    } 
} 

Enum Klasse

public enum FeedbackType { 
    CLA('Complaint'), 
    CLE('Complement'), 
    ENQ('Enquiry') 

    final String value 
    FeedbackType(String value){ this.value = value } 

    @Override 
    String toString(){ value } 
    String getKey() { name() } 

} 

rief ich die Tag-Bibliothek in GSP mit diesem die Fehler

<l:enumFeedbackType value="${feedbackInstance?.type}" optionKey ="key" /> 

Dies ist
URI /feedback/feedback/create 
Class groovy.lang.MissingMethodException 
Message No signature of method: org.codehaus.groovy.grails.web.pages.GroovyPage.select() is applicable for argument types: (java.lang.String, org.codehaus.groovy.runtime.GStringImpl, null, null) values: [type, [Complaint, Complement, Enquiry], null, null] Possible solutions: collect(), getOut(), inspect(), every() 
+0

Sie die Import-Anweisung für Ihre Enum fehlen – injecteer

+0

aber es ist unter src/groovy !? Wenn ich Import mache, ist es wie dieser Import src.groovy.FeedbackType? Dies kann vom Compiler –

+0

nicht akzeptiert werden. Sie können eine Standardpaketklasse nicht in eine Klasse eines nicht standardmäßigen Pakets importieren. Also, entweder setzen Sie Ihre Tag-Lib in ein Standard-Paket, oder die enum in 'feedback' – injecteer

Antwort

0

dies sollte funktionieren:

def enumFeedbackType ={attrs, body -> 
    attrs.name = "type" 
    attrs.from = FeedbackType.values() 
    out << g.select(attrs) 
} 
+0

es funktioniert, aber der Wert von optionKey =" Schlüssel "war ignoriert !! –

+0

Woher weißt du das? – injecteer

+0

Ich habe die Ausgabe bereits überprüft, wenn die OptionKey gearbeitet wurde, sollte es das Tag des ausgewählten Elements zurückgeben, zum Beispiel wird Komplement das CLE anstelle des Komplements sein. Aber es ist nicht so, dass es bedeutet, dass es immer noch die Standard-OneString() one –