Multiple instances of the same bridge application behave badly due to ID 
conflicts
----------------------------------------------------------------------------------

         Key: PB-35
         URL: http://issues.apache.org/jira/browse/PB-35
     Project: Portals Bridges
        Type: Bug
  Components: jsf  
 Environment: Tested in Liferay
    Reporter: russ danner


I am using the myFaces implementation of JSF in conjunction with the Apache 
portal bridge.  

I have no issue when I use the portlet as a single instance. All is beautiful. 
When I make the portlet multi-instance the eorld comes tumbling down. All the 
javascript and component ID's are the same.

--
I know myfaces looks to the external context to call help create a unique id 
for the components which should call response.namespace();

You can see in the HTML output of the lifray install that unqiue names are 
being generated for the each portlet (both the same "flavor")

portlet [EMAIL PROTECTED] namespace 
response[_contentRepositoryBrowser-wide_WAR_contentRepositoryBrowser_INSTANCE_Ju5n_]

portlet [EMAIL PROTECTED] namespace 
response[_contentRepositoryBrowser-wide_WAR_contentRepositoryBrowser_INSTANCE_1cKB_]


I know myFaces makes the following call on create unique Id:
   public String createUniqueId()
   {
        ExternalContext extCtx = 
FacesContext.getCurrentInstance().getExternalContext();
        return extCtx.encodeNamespace(UNIQUE_ID_PREFIX + _uniqueIdCounter++);
    }

which in the end should pickup the names given by 
RenderResponse.getNamespace(), yet that is no where in the HTML output.  

As far as I can tell this is because the external context implementation 
provided with the apache jsf portlet bridge does the following:

    /**
     * @see 
javax.faces.context.ExternalContext#encodeNamespace(java.lang.String)
     */
    public String encodeNamespace(String s)
    {
        return s;
    }


according to the documentation for ExternalContext.encodeNamespace(..)
Return the specified name, after prefixing it with a namespace that ensures 
that it will be unique within the context of a particular page.

Servlet: The input value must be returned unchanged.

Portlet: The returned value must be the input value prefixed by the value 
returned by the javax.portlet.RenderResponse method getNamespace().


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to