Как назвать Taglib как функцию в доменном классе

Я должен назвать Статический Плагин Ресурсов (http://www.grails.org/Static+Resources+Plugin) от моего доменного класса.

Это работает отлично в контроллере:

 def tstLink = resourceLinkTo(dir:"docs/${identifier}",file:originalFileName)

но в доменном классе я добираюсь

Exception Message: No signature of method: static org.maflt.ibidem.Item.resourceLinkTo() is applicable for argument types: (java.util.LinkedHashMap) values: [[dir:docs/19e9ea9d-5fae-4a35-80a2-daedfbc7c2c2, file:2009-11-12_1552.png]] 

Я предполагаю, что это - общая проблема.

Таким образом, как Вы называете taglib как функцию в доменном классе?

9
задан Brad Rhoads 28 January 2010 в 16:02
поделиться

2 ответа

Я столкнулся с этой проблемой некоторое время назад для приложения, на котором я работал. То, что я оказался, делал звонок в тег в метод обслуживания:

class MyService {
   def grailsApplication //autowired by spring

   def methodThatUsesATag(identifier, originalFileName) {
      //This is the default grails tag library
      def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')

      g.resourceLinkTo(dir:"docs/${identifier}",file:originalFileName)
   }
}

Тогда в моем классе доменов я мог бы добраться до службы через Spring Tavering:

class MyDomain {
    String originalFileName
    def myService  //autowired

    static transients = ['myService'] //Necessary so that GORM doesn't try to persist the service instance.

    //You can create a method at this point that uses your
    //service to return what you need from the domain instance.
    def myMethod() {
       myService.methodThatUsesATag(id, originalFileName)
    }
}
11
ответ дан 3 November 2019 в 01:56
поделиться

Большинство Taglibs полагаются на данные от контроллера, поэтому часто невозможно повторно повторно повторно использовать, в то время как другие касаются логики просмотра так часто, это не то, что вы хотели бы поставить в доменный класс.

Это сказано, что я уверен, что у вас есть свои причины, поэтому, возможно, источник TAGLIB поможет:

class ResourceTagLib  {

    def externalResourceServerService

    def resourceLinkTo = { attrs ->
        out << externalResourceServerService.uri
        out << '/'
        if(attrs['dir']) {
            out << "${attrs['dir']}/"
        }
        if(attrs['file']) {
            out << "${attrs['file']}"
        }
    }
}

, то есть введите внешний вид Externresourceserverservice в ваш класс доменов, а остальные должны быть простыми.

-1
ответ дан 3 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: