2017-02-04 3 views
0

J'ai créé mon taglib en utilisant la commande: "grails create-taglib TimeTag" Et une étiquette squelette a été créée appelée TimeTagLib.ne peut pas faire fonctionner mon taglib personnalisé

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

et dans le gsp fichier j'ai ajouté cette ligne:

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

Je reçois le message suivant: message

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 

Je ne sais pas quoi faire ... Je pensais avoir bien suivi la documentation mais apparemment pas. J'ai-Grails 3.2.4

=================== LA SOLUTION ================= =

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

Le GSP:

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

Pour appeler votre tag, utilisez: '$ {myTag.weekNo (offset: 0)}' –

+0

Oui, vous êtes tout à fait wright mais j'ai aussi eu plus de bugs que vous pouvez lire dans le commentaire ci-dessous. – larand

Répondre

2

Vous semblez avoir un simple, mais fondamental, l'incompréhension de la façon d'appeler votre bibliothèque de balises personnalisées. Au lieu d'utiliser le nom de classe, vous devez utiliser le namespace, de sorte que votre bibliothèque de balises (dans votre question) soit appelée comme telle: ${myTag.weekNo(offset: 0)} ou <myTag:weekNo offset="0" />.

+0

Ok, je dirais -aucune compréhension du tout-. Mais j'étais conscient de cela et j'ai aussi testé avec myTag mais je n'ai pas reconnu que j'avais une erreur différente cette fois. Je ne pouvais pas ajouter le paramètre attrs.offset à l'entier semaineNo sans d'abord convertir le paramètre en entier. Grâce à vous j'ai dû vérifier une fois de plus et ensuite j'ai reconnu les différents messages d'erreur. – larand