myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matthias Weßendorf (JIRA) <...@myfaces.apache.org>
Subject [jira] Resolved: (TRINIDAD-1610) Relocatable Resources support in Trinidad
Date Mon, 23 Nov 2009 09:04:39 GMT

     [ 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.


Mime
View raw message