我想在我的应用中为所有视图提供一种方法。
我希望能够像这样打电话:
<span>${ getDynamicText() }</span>
实现这一目标的最明显的方法是:
${ UtilClass.getDynamicText() }
#3的好处是只需要在一个地方进行更改。必须在每个控制器动作中进行#1;和#2需要在每个想要使用该方法的View页面上导入。
那么有没有办法添加一种方法供我的应用中的所有视图使用?
我不得不承认我不太详细地知道.gsp文件是如何在幕后处理的,所以也许它们没有相应的类,因此无法以这种方式进行操作。好文章/文档的链接将获得额外的好事。
答案 0 :(得分:3)
GSP被编译为扩展org.codehaus.groovy.grails.web.pages.GroovyPage
的类,因此您可以向该元类添加方法,并且它们可供所有GSP使用。最好的地方是BootStrap.groovy
(或插件doWithDynamicMethods
关闭):
import org.codehaus.groovy.grails.web.pages.GroovyPage
class BootStrap {
def init = { servletContext ->
GroovyPage.metaClass.getDynamicText = { ... }
}
}
答案 1 :(得分:2)
在GSP中重用功能的推荐方法是将其定义为标记,例如
class MyTagLib {
static namespace = 'my'
def dynamicText = {attrs ->
out << 'not very dynamic'
}
}
然后,您可以使用以下命令在GSP中调用此标记:
<my:dynamicText/>
答案 2 :(得分:1)
第4种方法:创建一个具有方法'.getDynamicText'的类/服务,并将其内容放入before
过滤器(request.setAttribute('x', myDynamicTextGeneratorObject)
)的请求中
现在您可以在任何GSP中使用x.dynamicText
答案 3 :(得分:0)
我就是这样做的:
grails install-templates
\src\templatesscaffolding
class ${className}Controller extends NewController
您现在可以在每个类和gsp中使用该方法。