2017-02-04 16 views
0

Я создал свой taglib с помощью команды: "grails create-taglib TimeTag" И был создан тег скелета под названием TimeTagLib.не может получить мой пользовательский 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 = 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) 
    } 
} 

и GSP-файла я добавил эту строку:

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

И я получаю следующее сообщение: Сообщение

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 

Я просто не знаю, что делать ... Я думал, что достаточно хорошо разбираюсь в документации, но, видимо, нет. У меня есть grails-3.2.4

================== РЕШЕНИЕ =================================================================================================== =

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

ГСП:

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

Чтобы вызвать ваш тег, используйте: '$ {myTag.weekNo (offset: 0)}' –

+0

Да, вы совершенно противны, но у меня также было больше ошибок, о чем вы можете прочитать в комментарии ниже. – larand

ответ

2

Вы, кажется, есть простой, но фундаментальный, непонимание того, как назвать ваш пользовательский тег библиотеки. Вместо использования имени класса вам необходимо использовать namespace, поэтому ваша библиотека тегов (в вашем вопросе) будет вызываться как таковая: ${myTag.weekNo(offset: 0)} или <myTag:weekNo offset="0" />.

+0

Хорошо, я бы сказал, совсем не понимаю. Но я знал об этом, а также тестировал его с помощью myTag, но не узнал, что в то время у меня другая ошибка. Я не мог добавить параметр attrs.offset к целой неделеNo без первого приведения параметра в целое число. Благодаря вам я должен был проверить еще раз, а затем я узнал о различных ошибках. – larand