You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Juan Fernandez Corugedo (Commented) (JIRA)" <de...@myfaces.apache.org> on 2012/01/16 11:28:41 UTC

[jira] [Commented] (MYFACES-3447) Invalid Id check in the UIViewRoot.addComponentResource method

    [ https://issues.apache.org/jira/browse/MYFACES-3447?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13186851#comment-13186851 ] 

Juan Fernandez Corugedo commented on MYFACES-3447:
--------------------------------------------------

Ok, all that you have said its truth, but how can I put two outputStylesheet with same ID but diferent clientID and value (that is perfectly correct)
                
> Invalid Id check in the UIViewRoot.addComponentResource method
> --------------------------------------------------------------
>
>                 Key: MYFACES-3447
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3447
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.3, 2.1.4, 2.1.5
>         Environment: Glassfish 3.1 y jdk1.6
>            Reporter: Juan Fernandez Corugedo
>            Assignee: Leonardo Uribe
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> The method addComponentResource of the class UIViewRoot makes a check over the Id attribute of each component that will be inserted into the componentResources list:
> <code>
>         // If the component ID of componentResource matches the ID of a resource that has already been added, remove the old resource.
>         String componentId = componentResource.getId();
>        ...
>         else if (componentId != null)
>             {
>                 for(Iterator<UIComponent> it = componentResources.iterator(); it.hasNext();)
>                 {
>                     UIComponent component = it.next();
>                     if(componentId.equals(component.getId()) && componentResource != component)
>                     {
>                         it.remove();
>                     }
>                     else if (componentResource == component)
>                     {
>                         alreadyAdded = true;
>                     }
>                 }
>             }
> </code>
> As you can see, if there are two components with the same Id but different clientId, only one of them will be included in the header:
> <bks:outputStylesheet id="testStyle" library="css1" name="test1.css"/> <!-- Its clientId is testStyle -->
> <form id="form">
> ...
> <bks:outputStylesheet id="testStyle" library="css2" name="test2.css"/> <!-- Its clientId is form:testStyle -->
> ...
> </form>
> This situtation can be solved using the clientId instead of the id attribute:
> <code>
>         // If the component CLIENT_ID of componentResource matches the CLIENT_ID of a resource that has already been added, remove the old resource.
>         String componentId = componentResource.getClientId();
> </code>
>        

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira