Tengo filtros como los que se definen a continuación. Ejecutan el mismo bloque de código en varios lugares, así que para mantenerlo SECO refactoré ese código en un método llamado doResponse().Llamar a render() desde un método de filtro de ayuda en 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
}
}
Sin embargo, esto tiene un desagradable efecto secundario. Parece que el método render() solo está disponible desde el cierre de filtros. ¿Hay alguna forma (limpia) para llamar a render() desde doResponse()?
Editar: El error que consigo es:
groovy.lang.MissingMethodException: No hay ninguna firma de método: MyFilters.render() es aplicable para los tipos de argumentos: los valores (java.util.LinkedHashMap): [[Estado : 500, contentType: text/xml, codificación: ISO-8859-1, texto: ...]]
hola He intentado hacerlo, pero obtengo: java.lang.NullPointerException: no se puede establecer la propiedad 'viewName' en el objeto nulo \t en java.lang.Thread.run (Thread.java:680) –