Я должен назвать Статический Плагин Ресурсов (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 как функцию в доменном классе?
Я столкнулся с этой проблемой некоторое время назад для приложения, на котором я работал. То, что я оказался, делал звонок в тег в метод обслуживания:
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)
}
}
Большинство 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 в ваш класс доменов, а остальные должны быть простыми.