Class FreemarkerResult

java.lang.Object
org.apache.struts2.result.StrutsResultSupport
org.apache.struts2.views.freemarker.FreemarkerResult
All Implemented Interfaces:
Serializable, Result, StrutsStatics

public class FreemarkerResult extends StrutsResultSupport
Renders a view using the Freemarker template engine.
See Also:
  • Field Details

    • invocation

      protected ActionInvocation invocation
    • configuration

      protected freemarker.template.Configuration configuration
    • wrapper

      protected freemarker.template.ObjectWrapper wrapper
    • freemarkerManager

      protected FreemarkerManager freemarkerManager
    • location

      protected String location
  • Constructor Details

    • FreemarkerResult

      public FreemarkerResult()
    • FreemarkerResult

      public FreemarkerResult(String location)
  • Method Details

    • setFreemarkerManager

      public void setFreemarkerManager(FreemarkerManager mgr)
    • setContentType

      public void setContentType(String aContentType)
    • getContentType

      public String getContentType()
      allow parameterization of the contentType the default being text/html
      Returns:
      the content type
    • doExecute

      public void doExecute(String locationArg, ActionInvocation invocation) throws IOException, freemarker.template.TemplateException
      Execute this result, using the specified template locationArg.

      The template locationArg has already been interpolated for any variable substitutions

      this method obtains the freemarker configuration and the object wrapper from the provided hooks. It them implements the template processing workflow by calling the hooks for preTemplateProcess and postTemplateProcess

      Specified by:
      doExecute in class StrutsResultSupport
      Parameters:
      locationArg - location argument
      invocation - the action invocation
      Throws:
      IOException - in case of IO errors
      freemarker.template.TemplateException - in case of freemarker template errors
    • getConfiguration

      protected freemarker.template.Configuration getConfiguration() throws freemarker.template.TemplateException

      This method is called from doExecute(String, ActionInvocation) to obtain the FreeMarker configuration object that this result will use for template loading. This is a hook that allows you to custom-configure the configuration object in a subclass, or to fetch it from an IoC container.

      The default implementation obtains the configuration from the ConfigurationManager instance.

      Returns:
      the freemarker configuration object
      Throws:
      freemarker.template.TemplateException - in case of freemarker configuration errors
    • getObjectWrapper

      protected freemarker.template.ObjectWrapper getObjectWrapper()

      This method is called from doExecute(String, ActionInvocation) to obtain the FreeMarker object wrapper object that this result will use for adapting objects into template models. This is a hook that allows you to custom-configure the wrapper object in a subclass.

      The default implementation returns Configurable.getObjectWrapper()

      Returns:
      the object wrapper from configuration
    • setWriter

      public void setWriter(Writer writer)
    • getWriter

      protected Writer getWriter() throws IOException
      The default writer writes directly to the response writer.
      Returns:
      Writer the response writer
      Throws:
      IOException - in case of IO errors
    • createModel

      protected freemarker.template.TemplateModel createModel() throws freemarker.template.TemplateModelException
      Build the instance of the ScopesHashModel, including JspTagLib support

      Objects added to the model are

      • Application - servlet context attributes hash model
      • JspTaglibs - jsp tag lib factory model
      • Request - request attributes hash model
      • Session - session attributes hash model
      • request - the HttpServletRequst object for direct access
      • response - the HttpServletResponse object for direct access
      • stack - the OgnLValueStack instance for direct access
      • action - the action itself
      • exception - optional : the JSP or Servlet exception as per the servlet spec (for JSP Exception pages)
      • struts - instance of the StrutsUtil class
      Returns:
      TemplateModel returns the created template model
      Throws:
      freemarker.template.TemplateModelException - in case of errors during creating the model
    • deduceLocale

      protected Locale deduceLocale()
      Returns the locale used for the Configuration.getTemplate(String, Locale) call. The base implementation simply returns the locale setting of the action (assuming the action implements LocaleProvider) or, if the action does not the configuration's locale is returned. Override this method to provide different behaviour,
      Returns:
      the locale from action if action implements the LocaleProvider) or local from configuration
    • postTemplateProcess

      protected void postTemplateProcess(freemarker.template.Template template, freemarker.template.TemplateModel model) throws IOException
      the default implementation of postTemplateProcess applies the contentType parameter
      Parameters:
      template - the freemarker template
      model - the template model
      Throws:
      IOException - in case of IO errors
    • preTemplateProcess

      protected boolean preTemplateProcess(freemarker.template.Template template, freemarker.template.TemplateModel model) throws IOException
      Called before the execution is passed to template.process(). This is a generic hook you might use in subclasses to perform a specific action before the template is processed. By default does nothing. A typical action to perform here is to inject application-specific objects into the model root
      Parameters:
      template - the freemarker template
      model - the template model
      Returns:
      true to process the template, false to suppress template processing.
      Throws:
      IOException - in case of IO errors
    • isWriteIfCompleted

      public boolean isWriteIfCompleted()
    • setWriteIfCompleted

      public void setWriteIfCompleted(Boolean writeIfCompleted)
      Parameters:
      writeIfCompleted - template is processed and flushed according to freemarker library policies