Render the markup for a
<script>
element that renders the script
Resource
specified by the optional
name
attribute and library
attributes.
The implementation of this renderer must
have a @ListenerFor
annotation attached to it, at the class level, declaring PostAddToViewEvent.class
as the value of the systemEventClass
attribute. The
presence of this annotation on a renderer implies the renderer
implements ComponentSystemEventListener
,
which this renderer must do. The implementation of
processEvent()
must extract the UIComponent
from the argument event and look for the presence of the key
"target
" in the component's attribute Map
. If
and only if such a key is present, the implementation of
processEvent()
must pass the component to UIViewRoot.addComponentResource()
.
Decode Behavior
No action is required during decode for this renderer.
Encode Behavior
Common Algorithm for Obtaining A Resource to Render
This algorithm is used by all resource renderers to obtain
a Resource
instance which is then rendered in a
specific way depending on what kind of renderer is doing the
encoding.
Look in the component attribute Map
for a
value under the key name.
Look in the component attribute Map
for a
value under the key library. This attribute is
optional, therefore, library may be
null
.
Create the resource by calling
Application.getResourceHandler.createResource(name,
library);
.
This algorithm is used by all resource renderers to render the resource.
encodeBegin()
must take no action.
Because this renderer returns true
from
getRendersChildren()
, the encodeChildren()
method must take the following action.
If there is no name attribute, and the
argument component
has no children, and
ProjectStage
is not
ProjectStage.Production
, add a
FacesMessage
for this component's clientId to the
FacesContext
stating that if no name attribute is
present, and no body content is present either, then the user
should take action to correct this problem. In this case,
encodeChildren()
must take no further
action.
If there is no name attribute and the argument
component
does have children, the renderer
must ensure that those children are encoded as usual.
If there is a name attribute and the
argument component
does have children, the
renderer must log a descriptive localized message stating that
the child content will be ignored. The resource referenced by
the name attribute will be rendered in
encodeEnd()
.
If there is a name attribute and the
argument component
does not have children,
encodeChildren()
must take no action.
encodeEnd()
must take specific action based on
the specific kind of resource being rendered.
Use the algorithm Common Encode Behavior for
encodeBegin()
, encodeChildren()
and
getRendersChildren()
.
For encodeEnd()
, use the algorithm Common
Algorithm for Obtaining A Resource to Render above to
obtain a reference to the Resource
to be
encoded.
If this is NOT the first time this Resource
has
been referenced on this request take no action and return.
Render a script element. Call
resource.getRequestPath()
. If the result contains
a query string, take care to handle it correctly. Pass the
request path to a call to encodeResourceURL()
on
the ExternalContext
. Use the result as the value
of the "src" attribute. Use the result from calling
resource.getContentType()
as the value of the
"type" attribute.
This renderer is responsible for rendering its children.
Attributes with a ignored-by-renderer
value of
true
are not interpreted by the renderer and are conveyed
straight to the rendered markup, without checking for validity. Attributes with a
ignored-by-renderer
value of false
are interpreted
by the renderer, and may or may not be checked for validity by the renderer.
Attributes | |||||
attribute-name | ignored-by-renderer | attribute-class | description | default-value | |
---|---|---|---|---|---|
library
|
false | java.lang.String |
The libraryName for this resource. |
undefined | |
name
|
false | java.lang.String |
The resourceName for this resource. This attribute is required |
undefined | |
target
|
false | java.lang.String |
The target area for which this resource will be rendered. For example, target="head" would cause the resource to be rendered within the head element. If no value is specififed, the script element is rendered at the same point in the view where the tag is located. Currently supported values for this attribute are "head", "body", and "form". |
undefined |