org.springframework.web.servlet.view.freemarker

Class FreeMarkerView

    • Constructor Detail

      • FreeMarkerView

        public FreeMarkerView()
    • Method Detail

      • setEncoding

        public void setEncoding(@Nullable
                                java.lang.String encoding)
        Set the encoding of the FreeMarker template file. Default is determined by the FreeMarker Configuration: "ISO-8859-1" if not specified otherwise.

        Specify the encoding in the FreeMarker Configuration rather than per template if all your templates share a common encoding.

      • getEncoding

        @Nullable
        protected java.lang.String getEncoding()
        Return the encoding for the FreeMarker template.
      • setConfiguration

        public void setConfiguration(@Nullable
                                     freemarker.template.Configuration configuration)
        Set the FreeMarker Configuration to be used by this view.

        If this is not set, the default lookup will occur: a single FreeMarkerConfig is expected in the current web application context, with any bean name. Note: using this method will cause a new instance of TaglibFactory to created for every single FreeMarkerView instance. This can be quite expensive in terms of memory and initial CPU usage. In production it is recommended that you use a FreeMarkerConfig which exposes a single shared TaglibFactory.

      • getConfiguration

        @Nullable
        protected freemarker.template.Configuration getConfiguration()
        Return the FreeMarker configuration used by this view.
      • obtainConfiguration

        protected freemarker.template.Configuration obtainConfiguration()
        Obtain the FreeMarker configuration for actual use.
        Returns:
        the FreeMarker configuration (never null)
        Throws:
        java.lang.IllegalStateException - in case of no Configuration object set
        Since:
        5.0
      • initServletContext

        protected void initServletContext(ServletContext servletContext)
                                   throws BeansException
        Invoked on startup. Looks for a single FreeMarkerConfig bean to find the relevant Configuration for this factory.

        Checks that the template for the default Locale can be found: FreeMarker will check non-Locale-specific templates if a locale-specific one is not found.

        Overrides:
        initServletContext in class WebApplicationObjectSupport
        Parameters:
        servletContext - the ServletContext that this application object runs in (never null)
        Throws:
        BeansException
        See Also:
        TemplateCache.getTemplate(java.lang.String, java.util.Locale, java.lang.Object, java.lang.String, boolean)
      • getObjectWrapper

        protected freemarker.template.ObjectWrapper getObjectWrapper()
        Return the configured FreeMarker ObjectWrapper, or the default wrapper if none specified.
        See Also:
        Configurable.getObjectWrapper()
      • checkResource

        public boolean checkResource(java.util.Locale locale)
                              throws java.lang.Exception
        Check that the FreeMarker template used for this view exists and is valid.

        Can be overridden to customize the behavior, for example in case of multiple templates to be rendered into a single view.

        Overrides:
        checkResource in class AbstractUrlBasedView
        Parameters:
        locale - the desired Locale that we're looking for
        Returns:
        true if the resource exists (or is assumed to exist); false if we know that it does not exist
        Throws:
        java.lang.Exception - if the resource exists but is invalid (e.g. could not be parsed)
      • renderMergedTemplateModel

        protected void renderMergedTemplateModel(java.util.Map<java.lang.String,java.lang.Object> model,
                                                 HttpServletRequest request,
                                                 HttpServletResponse response)
                                          throws java.lang.Exception
        Process the model map by merging it with the FreeMarker template. Output is directed to the servlet response.

        This method can be overridden if custom behavior is needed.

        Specified by:
        renderMergedTemplateModel in class AbstractTemplateView
        Parameters:
        model - combined output Map, with request attributes and session attributes merged into it if required
        request - current HTTP request
        response - current HTTP response
        Throws:
        java.lang.Exception - if rendering failed
      • buildTemplateModel

        protected freemarker.template.SimpleHash buildTemplateModel(java.util.Map<java.lang.String,java.lang.Object> model,
                                                                    HttpServletRequest request,
                                                                    HttpServletResponse response)
        Build a FreeMarker template model for the given model Map.

        The default implementation builds a AllHttpScopesHashModel.

        Parameters:
        model - the model to use for rendering
        request - current HTTP request
        response - current servlet response
        Returns:
        the FreeMarker template model, as a SimpleHash or subclass thereof
      • getTemplate

        protected freemarker.template.Template getTemplate(java.util.Locale locale)
                                                    throws java.io.IOException
        Retrieve the FreeMarker template for the given locale, to be rendering by this view.

        By default, the template specified by the "url" bean property will be retrieved.

        Parameters:
        locale - the current locale
        Returns:
        the FreeMarker template to render
        Throws:
        java.io.IOException - if the template file could not be retrieved
        See Also:
        AbstractUrlBasedView.setUrl(java.lang.String), getTemplate(String, java.util.Locale)
      • getTemplate

        protected freemarker.template.Template getTemplate(java.lang.String name,
                                                           java.util.Locale locale)
                                                    throws java.io.IOException
        Retrieve the FreeMarker template specified by the given name, using the encoding specified by the "encoding" bean property.

        Can be called by subclasses to retrieve a specific template, for example to render multiple templates into a single view.

        Parameters:
        name - the file name of the desired template
        locale - the current locale
        Returns:
        the FreeMarker template
        Throws:
        java.io.IOException - if the template file could not be retrieved
      • processTemplate

        protected void processTemplate(freemarker.template.Template template,
                                       freemarker.template.SimpleHash model,
                                       HttpServletResponse response)
                                throws java.io.IOException,
                                       freemarker.template.TemplateException
        Process the FreeMarker template to the servlet response.

        Can be overridden to customize the behavior.

        Parameters:
        template - the template to process
        model - the model for the template
        response - servlet response (use this to get the OutputStream or Writer)
        Throws:
        java.io.IOException - if the template file could not be retrieved
        freemarker.template.TemplateException - if thrown by FreeMarker
        See Also:
        Template.process(Object, java.io.Writer)