Author: cbrisson Date: Thu Jun 13 14:59:49 2019 New Revision: 1861264 URL: http://svn.apache.org/viewvc?rev=1861264&view=rev Log: [view-tools] Allow subclasses to customize the writer used for merging the template ; add missing javadoc headers
Modified: velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java Modified: velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java?rev=1861264&r1=1861263&r2=1861264&view=diff ============================================================================== --- velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java (original) +++ velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java Thu Jun 13 14:59:49 2019 @@ -236,7 +236,7 @@ public class VelocityViewServlet extends Template template = handleRequest(request, response, context); // merge the template and context into the response - mergeTemplate(template, context, response); + mergeTemplate(template, context, request, response); } catch (IOException e) { error(request, response, e); throw e; @@ -305,12 +305,23 @@ public class VelocityViewServlet extends return getTemplate(request, response); } + /** + * Get a configured Velocity context for the current request and response + * @param request client request + * @param response client response + * @return configured context + */ protected Context createContext(HttpServletRequest request, HttpServletResponse response) { return getVelocityView().createContext(request, response); } + /** + * Standard extension point to populate the context with additional entries + * @param context target context + * @param request client request + */ protected void fillContext(Context context, HttpServletRequest request) { // this implementation does nothing @@ -338,40 +349,88 @@ public class VelocityViewServlet extends response.setContentType(getVelocityView().getDefaultContentType()); } + /** + * Get a template by client request and response + * @param request client request + * @param response client response + * @return found template + */ protected Template getTemplate(HttpServletRequest request, HttpServletResponse response) { return getVelocityView().getTemplate(request); } + /** + * Get a template by name + * @param name template name + * @return found template + */ protected Template getTemplate(String name) { return getVelocityView().getTemplate(name); } - protected void mergeTemplate(Template template, Context context, - HttpServletResponse response) + /** + * Merge template + * @param template input template + * @param context Velocity context + * @param request client request + * @param response client response + * @throws IOException + */ + protected void mergeTemplate(Template template, Context context, HttpServletRequest request, HttpServletResponse response) throws IOException { + Writer writer = getOutputWriter(request, response); + getVelocityView().merge(template, context, writer); + Boolean buffered = request == null ? Boolean.FALSE : (Boolean)request.getAttribute(BUFFER_OUTPUT_PARAM); + if (buffered != null && buffered) + { + response.getWriter().write(writer.toString()); + } + } + + /** + * Get the output stream writer to use. If the writer is to be written afterwards to the response writer + * (as when <code>org.apache.velocity.tools.bufferOutput</code> is true), this method must set the + * <code>org.apache.velocity.tools.bufferOutput</code> request attribute to true. + * @param request + * @param response + * @return + * @throws IOException + */ + protected Writer getOutputWriter(HttpServletRequest request, HttpServletResponse response) + throws IOException + { Writer writer; if (this.bufferOutput) { writer = new StringWriter(); + request.setAttribute(BUFFER_OUTPUT_PARAM, true); } else { writer = response.getWriter(); } - - getVelocityView().merge(template, context, writer); - - if (this.bufferOutput) - { - response.getWriter().write(writer.toString()); - } + return writer; } - + /** + * Merge template + * @param template target template + * @param context client request + * @param response client response + * @throws IOException + * @deprecated see {{@link #mergeTemplate(Template, Context, HttpServletRequest, HttpServletResponse)}} + */ + @Deprecated + protected void mergeTemplate(Template template, Context context, HttpServletResponse response) + throws IOException + { + mergeTemplate(template, context, null, response); + } + /** * Invoked when there is an error thrown in any part of doRequest() processing. * <br><br>