Ho filtri come quelli definiti di seguito. Eseguono lo stesso blocco di codice in vari punti, quindi per mantenerlo ASCIUTTO ho rifattorizzato quel codice in un metodo chiamato doResponse().Chiamata di rendering() da un metodo di filtro helper in 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
}
}
Tuttavia questo ha un effetto collaterale sgradevole. Sembra che il metodo render() sia disponibile solo all'interno della chiusura dei filtri. C'è un modo (pulito) per me di chiamare render() da doResponse()?
Edit: L'errore che ottengo è:
groovy.lang.MissingMethodException: No firma del metodo: MyFilters.render() è applicabile per tipi di argomenti: i valori (java.util.LinkedHashMap): [[Stato : 500, contentType: text/xml, codifica: ISO-8859-1, testo: ...]]
ciao ho provato a farlo, ma ottenendo: java.lang.NullPointerException: Impossibile impostare la proprietà 'viewName' su oggetto nullo \t a java.lang.Thread.run (Thread.java:680) –