Je dois obtenir la sortie rendue de la vue Spring 3.1 MVC dans une chaîne (pour l'envoyer à un convertisseur PDF, ou à un e-mail MIME, etc ...) et j'ai utilisé le code suivant :
Ceci est injecté dans le contrôleur
@Autowired
TilesViewResolver viewResolver;
Et la méthode d'aide suivante :
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 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 newModel = new HashMap(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();
}
Crédit à Ted Young et son HTML2PDFViewResolver sur lequel est basé mon code.
Ma question est : y a-t-il une meilleure façon de faire cela ? Le code que j'ai fonctionne bien mais maintenant que je me rapproche de la production, je me suis dit que s'il y a une place pour l'amélioration, j'aimerais l'essayer.
Merci à tous