[
https://issues.apache.org/jira/browse/TRINIDAD-1610?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Matthias Weßendorf resolved TRINIDAD-1610.
------------------------------------------
Resolution: Fixed
Fix Version/s: 2.0.0-core
> Relocatable Resources support in Trinidad
> -----------------------------------------
>
> Key: TRINIDAD-1610
> URL: https://issues.apache.org/jira/browse/TRINIDAD-1610
> Project: MyFaces Trinidad
> Issue Type: New Feature
> Components: Components
> Affects Versions: 2.0.0-core
> Reporter: Matthias Weßendorf
> Assignee: Matthias Weßendorf
> Fix For: 2.0.0-core
>
> Attachments: TRINIDAD-1610.patch
>
>
> in order to avoid dependency to h:head/body/form BUT be able to
> support the "Relocatable Resources" feature, we should change our
> renderers for "head", "body" and "form" to check
> for any component resource(s) that has been targeted to one of these guys.
> This would mean that something like this just works:
> <tr:document
> xmlns="http://www.w3.org/1999/xhtml"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:tr="http://myfaces.apache.org/trinidad"
> title="TESTER of Scripts">
> <h:outputScript target="body" name="myCoolBody.js"/>
> <h:outputScript target="head" name="anAwesomeHead.js"/>
> </tr:document>
> ==> no need to add the nasty h:head/body.
> The call inside of the renderer should be fairly simple:
> ...
> for(UIComponent comp :
> context.getViewRoot().getComponentResources(context, "head"))
> {
> comp.encodeAll(context);
> }
> ...
> Note: We need to render out these resources pretty much BEFORE we end
> the particular HTML element (e.g. "head", "body" or "form")...
> In order to avoid duplicated code, I think we want to add a utility
> which should be called from particular renderers, like on
> CoreRenderer.java (part of the Trinidad API). This would allow
> extensions to easily use this new API as well...
> suggested change to CoreRenderer.java =>
> /**
> * Hook for rendering the component resources for the <code>target</code>.
> * @param context Current <code>FacesContext</code> object for this request.
> * @param target The target for the resources (e.g. head/body/form)
> *
> * @throws IOException
> */
> protected final void encodeComponentResources(
> FacesContext context,
> String target) throws IOException
> {
> if(target != null)
> {
> UIViewRoot viewRoot = context.getViewRoot();
> for(UIComponent componentResource :
> viewRoot.getComponentResources(context, target))
> {
> componentResource.encodeAll(context);
> }
> }
> }
> As a matter of fact the HeadRenderer's encodeEnd() method would simply
> look like:
> protected void encodeEnd(
> FacesContext context,
> RenderingContext arc,
> UIComponent comp,
> FacesBean bean) throws IOException
> {
> ResponseWriter rw = context.getResponseWriter();
> // trigger the rendering of targeted resource
> // for the HEAD, on UIViewRoot - if there are
> // any...
> encodeComponentResources(context, "head");
> rw.endElement("head");
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.