Ho bisogno di ottenere l'output di rendering di Spring 3.1 MVC View in una stringa (per l'invio a un convertitore PDF, o a un messaggio MIME, ecc ...) e sono stato con il seguente codice:Ottenere l'output di rendering di una MVC Spring 3.1 View
Questo viene iniettato nel controller
@Autowired
TilesViewResolver viewResolver;
e il seguente metodo di supporto:
private String renderViewToString(ModelMap map, HttpServletRequest request, HttpServletResponse httpServletResponse, final String viewName) {
final StringWriter html = new StringWriter();
View pdfView = new View() {
@Override
public String getContentType() {
return "application/pdf";
}
@Override
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(response) {
@Override
public PrintWriter getWriter() throws IOException {
return new PrintWriter(html);
}
};
View realView = viewResolver.resolveViewName(viewName, Locale.US);
Map<String, Object> newModel = new HashMap<String, Object>(model);
newModel.put("pdfMode", Boolean.TRUE);
realView.render(newModel, request, wrapper);
}
};
try {
pdfView.render(map, request, httpServletResponse);
} catch (Exception e) {
// Ignored for now
}
return html.toString();
}
credito alla Ted Young e il suo HTML2PDFViewResolver da cui è basato il mio codice.
La mia domanda c'è un modo migliore per farlo? Il codice che ho funziona va bene, ma ora mi sto avvicinando alla produzione e ho pensato che se c'è spazio per miglioramenti mi piacerebbe provarlo.
Grazie a tutti
nop, sembra buono. –
hai chiesto questo come una domanda ... L'ho visto come una risposta ... esattamente quello che stavo cercando ... assolutamente utile per me in quanto avevo solo bisogno dell'HTML per inviarlo come parte della mia risposta JSON ... Pollice su uomo ... Rock! – CodeBurner