2016-04-04 3 views
0

Я очень новичок в grails, Что я хочу сделать, это загрузить элементы данных из класса enum в поле select (combo box), а затем создать библиотеку тегов для этого.Как использовать и создавать библиотеку тегов для select (combobox) в grails

библиотеки тегов класса

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

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

} 

Я назвал библиотеку тегов в GSP с этим

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

Это ошибки

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

вы отсутствующий оператор импорта для перечисления – injecteer

+0

, но она находится под SRC/заводной !? если я делаю импорт, то это как этот импорт src.groovy.FeedbackType? это не может быть принято компилятором –

+0

, вы не можете импортировать класс пакета по умолчанию в класс нестандартного пакета. Таким образом, либо помещаем ваш tag-lib в пакет по умолчанию, либо перечисляем в 'feedback' – injecteer

ответ

0

это должно работать:

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

, это работает, но значение параметраKey =" key "было игнорируются !! –

+0

Откуда вы знаете? – injecteer

+0

Я проверил результат уже, если был обработан параметрKey, он должен вернуть тег выбранного элемента, например, Complement будет CLE вместо дополнения. Но это не значит, что он по-прежнему сохраняет значение по умолчанию, toString() one –