从Grails中的过滤器帮助器方法调用render()
发布时间:2020-12-14 16:25:25 所属栏目:大数据 来源:网络整理
导读:我有类似下面定义的过滤器.它们在不同的地方运行相同的代码块,所以为了保持DRY,我将该代码重构为一个名为doResponse()的方法. class MyFilters { def filters = { web(uri: '/web/**') { before = { // Do Stuff if (condition) { doResponse(request,respon
我有类似下面定义的过滤器.它们在不同的地方运行相同的代码块,所以为了保持DRY,我将该代码重构为一个名为doResponse()的方法.
class MyFilters { def filters = { web(uri: '/web/**') { before = { // Do Stuff if (condition) { doResponse(request,response,params) } return true } after = { if (condition) { doResponse(request,params) } else { // Do Stuff doResponse(request,params) } } afterView = { } } } boolean doResponse(request,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,包括它们的所有者指的是父关闭;所以我们可以通过: if (condition) { doResponse(owner,request,params) } doRespond(..)方法: boolean doResponse(webFilter,params) { // Do Stuff webFilter.render(status: statusCode,contentType: "text/xml",text: text) // Do post-render stuff return false } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |