我有如下定義的過濾器。他們在各個地方運行相同的代碼塊,因此爲了保持乾爽,我將該代碼重構爲一個名爲doResponse()的方法。從Grails中的過濾器幫助器方法調用render()
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()方法只能在filters閉包中使用。有什麼(整潔)的方式讓我從doResponse()調用render()?
編輯:我得到的錯誤是:
groovy.lang.MissingMethodException:法無簽名:MyFilters.render()的參數類型是適用的:(java.util.LinkedHashMap中)值:[狀態:500,contentType:text/xml,encoding:ISO-8859-1,text:...]]
嗨我試圖做到這一點,但得到:java.lang.NullPointerException:無法設置屬性'視圖名'空對象 \t在java.lang.Thread.run(Thread.java:680) – 2011-05-30 18:53:32