我对 Grails 社区比较陌生,但我已经喜欢该引擎所提供的功能。目前,我正在实现一个自定义标签库,以便轻松地在我们的页面上进行标准设计。但是,为了实用目的(例如过滤数据)和存储关于我的标签的请求级元数据(例如计数器、父/子关系),我需要一种调用辅助函数的方法。
我尝试了两种解决方案:
首先:我创建了一个服务,将其范围设置为“请求”
package myapp
class CustomTagService {
static scope = 'request'
def data = []
def add(localData) {
data.add(localData)
}
}
但是,当我尝试将它注入我的标签库时
package myapp
class MyTagLib {
def customTagService
def myTag = { attrs, body ->
customTagService.add(attrs)
}
}
引擎因引用请求范围而对我大喊大叫(经过长时间痛苦的堆栈跟踪):“范围'请求'对于当前线程不活动;如果您打算从单例中引用它,请考虑为该 bean 定义一个范围代理”
第二:我知道 pageScope 在标签闭包内可供我使用,并且我之前已经利用过它。但是,对于我想要的结构,封装将是更可取的。
如果我走错了路,请告诉我。我们欢迎所有的建议!