2017-02-04 3 views
0

Ich habe meine Taglib mit dem folgenden Befehl erstellt: "Grails Create-Taglib TimeTag" Und ein Skelett-Tag wurde namens TimeTagLib erstellt.kann meine benutzerdefinierte Taglib nicht funktionieren

package com.buffer 

class TimeTagLib { 
    static final namespace = 'myTag' 
    static defaultEncodeAs = [taglib:'html'] 
    //static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']] 
    def weekNo = {attrs, body -> 
     date = new Date() 
     def calendar = date.toCalendar() 
     def week = calendar.get(calendar.WEEK_OF_YEAR) 
     out << body() << calendar.format('yy') + String.format("%02d", week+attrs.offset) 
    } 
} 

und in der gsp-Datei habe ich diese Zeile:

<g:sortableColumn property="availW01" title="${timetaglib.weekno(offset: '0')}" /> 

Und ich bekomme die folgende Meldung: Nachricht

Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error evaluating expression [timetaglib.weekno(offset: '0')] on line [38]: Cannot invoke method weekno() on null object 
Caused by 
Cannot invoke method weekno() on null object 

Ich weiß nicht genau, was zu tun ... Ich dachte, ich hätte die Dokumentation gut genug, aber anscheinend nicht befolgt. Ich habe Grails-3.2.4

=================== DIE LÖSUNG ================= =

TagLib:

package com.buffer 

class TimeTagLib { 
    static final namespace = 'myTag' 
    static defaultEncodeAs = [taglib:'html'] 
    //static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']] 
    def weekNo = {attrs, body -> 
     Date date = new Date() 
     def calendar = date.toCalendar() 
     def week = calendar.get(calendar.WEEK_OF_YEAR) 
     out << String.format("V%02d", (week+(attrs.offset as Integer))) 
    } 
} 

Das APS:

<g:sortableColumn property="availW01" title="${myTag.weekNo(offset: "0")}" /> 
+1

Um Ihr Tag aufzurufen, verwenden Sie: '$ {myTag.weekNo (offset: 0)}' –

+0

Ja, Sie sind ziemlich wright, aber ich hatte auch mehr Bugs, wie Sie in dem Kommentar unten lesen können. – larand

Antwort

2

Sie scheinen einfach zu haben, aber von grundlegender Bedeutung, Missverständnis, wie Sie Ihre benutzerdefinierten Tag-Bibliothek aufrufen. Anstatt den Klassennamen zu verwenden, müssen Sie namespace verwenden, damit Ihre Tag-Bibliothek (in Ihrer Frage) als solche aufgerufen wird: ${myTag.weekNo(offset: 0)} oder <myTag:weekNo offset="0" />.

+0

Ok, würde ich sagen - überhaupt kein Verständnis -. Aber ich war mir dessen bewusst und auch getestet mit myTag, habe aber nicht erkannt, dass ich zu der Zeit einen anderen Fehler bekommen habe. Ich konnte den Parameter attrs.offset nicht zu der Ganzzahl weekNo hinzufügen, ohne zuerst den Parameter auf Integer zu setzen. Dank dir musste ich noch einmal nachschauen und dann erkannte ich die unterschiedliche Fehlermeldung. – larand

Verwandte Themen