Provide Scripting variables as request attributes for JSP
---------------------------------------------------------
Key: SLING-247
URL: https://issues.apache.org/jira/browse/SLING-247
Project: Sling
Issue Type: Improvement
Components: JSP
Reporter: Felix Meschberger
Fix For: 2.0.0
The scripting variables defined in the SlingBIndings class are defined as
global variables in script language bindings such as JavaScript and Velocity.
In JSP this binding does not exist yet.
The issue with JSP is, that JSPs are translated using a text-transformation to
a Java class implementing the Servlet interface. As such there is no such thing
as a global variable. A workaround to inject well known objects is implemented
with <sling:defineObjects> tag. But this tag does not make the same defined
variables available.
I suggest to enhance JSP scripting as follows:
(1) Bindings as Request Attributes
All bindings defined in the SlingBindings object prepared for the script
evaluation are stored as request attributes for use by the JSP.
(2) Predefined bindings as variables through <sling:defineObjects>
Some of the predefined bindings in the SlingBIndings object are mapped as
variables in the JSP when using the <sling:defineObjects> tag. Some variable
require special treatment:
- request: The request variable already exists and is of type
HttpServletRequest, the SlingHttpServletRequest object is bound as the
slingRequest variable.
- response: Same as for the request. The SlingHttpServletResponse object is
bound as slingResponse
- sling: Bound as is of type SlingScriptHelper
- resource: Bound as is of type Resource
- out: already bound by the JSP spec, nothing to be done
- flush: Bound as is of type boolean
- log: Bound as is of type org.slf4j.Logger
The variable names listed above (slingRequest, slingResponse, sling, resource,
flush, log) may be overwritten by specifying another name in the defineObjects
tag, such as <sling:defineObjects logName="logger" /> do use "logger" as the
name of the "Logger".
(3) additional bindings only for JSP when using <sling:defineObjects>
Currently the sling:defineObjects tag provides further variables: the JCR Node
to which the resource adapts, (optionally) the mapped object to which the
resource adapts (if the respective class is declared), the resource resolver
and the service locator. I suggest we just keep these variables, though they
are most probably definitely overkill....
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.