【发布时间】:2010-11-04 15:09:22
【问题描述】:
我有如下定义的过滤器。他们在不同的地方运行相同的代码块,所以为了保持干爽,我将代码重构为一个名为 doResponse() 的方法。
class MyFilters {
def filters = {
web(uri: '/web/**') {
before = {
// Do Stuff
if (condition) {
doResponse(request, response, params)
}
return true
}
after = {
if (condition) {
doResponse(request, response, params)
}
else {
// Do Stuff
doResponse(request, response, params)
}
}
afterView = {
}
}
}
boolean doResponse(request, response, params) {
// Do Stuff
render(status: statusCode, contentType: "text/xml", encoding: "ISO-8859-1", text: text)
// Do post-render stuff
return false
}
}
但是,这有一个令人讨厌的副作用。似乎 render() 方法只能在过滤器闭包中使用。我有什么(整洁的)方法可以从 doResponse() 调用 render() 吗?
编辑:我得到的错误是:
groovy.lang.MissingMethodException: 没有方法签名: MyFilters.render() 适用于参数类型: (java.util.LinkedHashMap) 值: [[status:500, contentType:text/xml, encoding:ISO- 8859-1,文本:...]]
【问题讨论】: