Class FreemarkerViewRenderer
java.lang.Object
org.apache.juneau.rest.server.view.freemarker.FreemarkerViewRenderer
- All Implemented Interfaces:
ResponseProcessor,ViewRenderer
ResponseProcessor that detects FreemarkerView-typed return values and asks the
configured Configuration to render them directly onto the response writer.
Auto-registered by FreemarkerMixin via
@Rest(responseProcessors=...)
— callers who add the mixin don't need to wire up this class explicitly. Callers who want
to handle FreemarkerView returns without adopting the mixin can add this class
to their own
responseProcessors list.
Behavior:
- Inspect the response content. If the value is not a
FreemarkerView, returnNEXTso the rest of the chain runs. - Read the active
FreemarkerMixinfrom theRestContextbean store to discover theConfiguration(lazy default if no configuration bean is registered) and the optional template-suffix knob. - Apply every entry from
FreemarkerView.getResponseHeaders()viares.setHeader(...). - Default
Content-Typetotext/html;charset=UTF-8if the caller did not set one explicitly. FreeMarker's bridge-defaultConfigurationusesHTMLOutputFormatso HTML is the natural target; an explicit caller header wins. - Call
configuration.getTemplate(templateName).process(view.getAttributes(), res.getWriter())to stream the rendered output. - When no FreeMarker engine is on the classpath, the
Configuration-typed import here fails to load at first use and surfacesNO_ENGINE_DIAGNOSTICnaming the missing dependency.
See Also:
- Since:
- 10.0.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringDefaultContent-Typeapplied when the view does not specify one explicitly.static final StringDiagnostic message emitted when no FreeMarker engine can be found on the classpath at render-time.Fields inherited from interface org.apache.juneau.rest.server.processor.ResponseProcessor
FINISHED, NEXT, RESTART -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintprocess(RestOpSession opSession) Process this response if possible.
-
Field Details
-
DEFAULT_CONTENT_TYPE
DefaultContent-Typeapplied when the view does not specify one explicitly.- See Also:
-
NO_ENGINE_DIAGNOSTIC
Diagnostic message emitted when no FreeMarker engine can be found on the classpath at render-time.Public so tests and consumer apps can pattern-match against the message text without depending on internal string literals.
- See Also:
-
-
Constructor Details
-
FreemarkerViewRenderer
public FreemarkerViewRenderer()
-
-
Method Details
-
process
Description copied from interface:ResponseProcessorProcess this response if possible.- Specified by:
processin interfaceResponseProcessor- Parameters:
opSession- The HTTP call.- Returns:
- One of the following codes:
0 - The processor could not handle the request.1 - The processor was able to fully handle the request.2 - The processor was able to partially handle the request by replacing the output. The response processors should start over.
- Throws:
IOException- If low-level exception occurred on output stream.
Results in aHttpServletResponse.SC_INTERNAL_SERVER_ERRORerror.BasicHttpException- If some other exception occurred.
Can be used to provide an appropriate HTTP response code and message.
-