У меня есть фильтры, подобные тем, которые определены ниже. Они запускают один и тот же блок кода в разных местах, поэтому, чтобы он был DRY, я реорганизовал этот код в метод, называемый doResponse().Вызов render() из метода фильтра-фильтра в Grails
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() доступен только из закрытия фильтра. Есть ли (аккуратный) способ для вызова render() из doResponse()?
Edit: Я получаю ошибку есть:
groovy.lang.MissingMethodException: Нет подписи метода: MyFilters.render() применяется для типов аргументов: значения (java.util.LinkedHashMap): [[статус : 500, contentType: text/xml, encoding: ISO-8859-1, текст: ...]]
hi Я попытался это сделать, но получение: java.lang.NullPointerException: Невозможно установить свойство «viewName» на нулевом объекте на java.lang.Thread.run (Thread.java:680) –