private boolean render( FileInfo fileInfo, Map<String, Object> model, Request request, HttpServletRequest servletRequest, HttpServletResponse servletResponse, Writer writer) throws IOException { servletResponse.setContentType("text/html"); String path = fileInfo.getPath(); File localFile = fileInfo.getFile(); if (model == null) { model = new HashMap<String, Object>(); } model.put("request", request); model.put("servletRequest", servletRequest); Template template; try { template = templateConfig.getTemplate(path); } catch (IOException e) { String msg = "problems getting template from path '" + path + "'"; logger.error(msg, e); throw new IOException(msg, e); } try { template.process(model, writer); return true; } catch (TemplateException e) { String msg = "could not render template in " + localFile; logger.error(msg, e); throw new IOException(msg, e); } finally { // don't close it here writer.flush(); } }
@Override public boolean renderResult( Request request, HttpServletRequest servletRequest, HttpServletResponse response, Object result) throws IOException { ModelView modelView; FileInfo fileInfo; if (result instanceof ModelView) { modelView = (ModelView) result; String view = modelView.getView(); if (view.startsWith("redirect:")) { String dest = view.substring(9); if (dest.startsWith("http:") || dest.startsWith("https:")) { ResponseUtils.sendRedirect(response, dest); } else { ResponseUtils.sendRelativeRedirect(servletRequest, response, dest); } return true; } fileInfo = fileLocator.findFile(view); if (fileInfo == null) { logger.error("template not found in path '{}'", view); return false; } } else if (result instanceof FileInfo) { fileInfo = (FileInfo) result; modelView = new ModelView(new HashMap<String, Object>(), fileInfo.getPath()); } else { throw new IllegalArgumentException( "Cannot render the result of type: " + result.getClass().getSimpleName()); } render(fileInfo, modelView.getModel(), request, servletRequest, response, response.getWriter()); return true; }