Package org.apache.struts2.views.freemarker

# 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:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected freemarker.template.Configuration`
  `configuration`
  `protected FreemarkerManager`
  `freemarkerManager`
  `protected ActionInvocation`
  `invocation`
  `protected String`
  `location`
  `protected freemarker.template.ObjectWrapper`
  `wrapper`

  ### Fields inherited from class org.apache.struts2.result.StrutsResultSupport

  `DEFAULT_PARAM, DEFAULT_URL_ENCODING, parseLocation`

  ### Fields inherited from interface org.apache.struts2.StrutsStatics

  `ACTION_MAPPING, HTTP_REQUEST, HTTP_RESPONSE, PAGE_CONTEXT, SERVLET_CONTEXT, SERVLET_DISPATCHER, STRUTS_ACTION_TAG_INVOCATION`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `FreemarkerResult()`
  `FreemarkerResult(String location)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected freemarker.template.TemplateModel`
  `createModel()`
  Build the instance of the ScopesHashModel, including JspTagLib support
  `protected Locale`
  `deduceLocale()`
  Returns the locale used for the `Configuration.getTemplate(String, Locale)` call.
  `void`
  `doExecute(String locationArg, ActionInvocation invocation)`
  Execute this result, using the specified template locationArg.
  `protected freemarker.template.Configuration`
  `getConfiguration()`
  This method is called from `doExecute(String, ActionInvocation)` to obtain the FreeMarker configuration object that this result will use for template loading.
  `String`
  `getContentType()`
  allow parameterization of the contentType the default being text/html
  `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.
  `protected Writer`
  `getWriter()`
  The default writer writes directly to the response writer.
  `boolean`
  `isWriteIfCompleted()`
  `protected void`
  `postTemplateProcess(freemarker.template.Template template, freemarker.template.TemplateModel model)`
  the default implementation of postTemplateProcess applies the contentType parameter
  `protected boolean`
  `preTemplateProcess(freemarker.template.Template template, freemarker.template.TemplateModel model)`
  Called before the execution is passed to template.process().
  `void`
  `setContentType(String aContentType)`
  `void`
  `setFreemarkerManager(FreemarkerManager mgr)`
  `void`
  `setWriteIfCompleted(Boolean writeIfCompleted)`
  `void`
  `setWriter(Writer writer)`

  ### Methods inherited from class org.apache.struts2.result.StrutsResultSupport

  `conditionalParse, conditionalParseCollection, execute, getLastFinalLocation, getLocation, setEncode, setLocation, setParse`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## 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