gpt4 book ai didi

grails - 从 Grails 中的过滤器辅助方法调用 render()

转载 作者:行者123 更新时间:2023-12-04 17:58:17 25 4
gpt4 key购买 nike

我有如下定义的过滤器。他们在不同的地方运行相同的代码块,所以为了保持它的干性,我将该代码重构为一个名为 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 , 文本:...]]

最佳答案

传递定义 render(..) 的对象doRespond(..) 的方法方法,并调用 render(..)该对象上的方法。

闭包有一些 implicit variables ,包括他们的owner指父闭包;所以我们可以通过:

if (condition) {
doResponse(owner, request, response, params)
}
doRespond(..)方法:
boolean doResponse(webFilter, request, response, params) {
// Do Stuff
webFilter.render(status: statusCode, contentType:
"text/xml", encoding: "ISO-8859-1", text: text)
// Do post-render stuff
return false
}

关于grails - 从 Grails 中的过滤器辅助方法调用 render(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4098064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com