You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ar...@apache.org on 2007/11/14 23:33:07 UTC

svn commit: r595100 - /myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/render/RenderUtils.java

Author: arobinson74
Date: Wed Nov 14 14:33:06 2007
New Revision: 595100

URL: http://svn.apache.org/viewvc?rev=595100&view=rev
Log:
TRINIDAD-821 -- RenderUtils.getRelativeId does not support the "::" method of relative referencing

Added code to support the same functionality as 
org.apache.myfaces.trinidad.util.ComponentUtils.findRelativeComponent(UIComponent, String)


Modified:
    myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/render/RenderUtils.java

Modified: myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/render/RenderUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/render/RenderUtils.java?rev=595100&r1=595099&r2=595100&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/render/RenderUtils.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/render/RenderUtils.java Wed Nov 14 14:33:06 2007
@@ -24,7 +24,6 @@
 import javax.faces.component.NamingContainer;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIForm;
-
 import javax.faces.context.FacesContext;
 
 import org.apache.myfaces.trinidad.component.UIXForm;
@@ -116,13 +115,40 @@
   {
     if ((relativeId == null) || (relativeId.length() == 0))
       return null;
-
+    
+    UIComponent parentNC;
     if (relativeId.charAt(0) == NamingContainer.SEPARATOR_CHAR)
-      return relativeId.substring(1);
-
-    UIComponent parentNC = _getParentNamingContainer(from.getParent());
-    if (parentNC == null)
-      return relativeId;
+    {
+      if (relativeId.length() > 1 && relativeId.charAt(1)
+        == NamingContainer.SEPARATOR_CHAR)
+      {
+        parentNC = _getParentNamingContainer(from.getParent());
+        int index = 2;
+        for (; index < relativeId.length() && relativeId.charAt(index) 
+          == NamingContainer.SEPARATOR_CHAR && parentNC != null; ++index)
+        {
+          parentNC = _getParentNamingContainer(parentNC.getParent());
+        }
+        if (parentNC == null || index >= relativeId.length())
+        {
+          // TODO: would it be better to return null from here?
+          return relativeId;
+        }
+        relativeId = relativeId.substring(index);
+      }
+      else
+      {
+        return relativeId.substring(1);
+      }
+    }
+    else
+    {
+      parentNC = _getParentNamingContainer(from.getParent());
+      if (parentNC == null)
+      {
+        return relativeId;
+      }
+    }
 
     return (parentNC.getClientId(context) +
             NamingContainer.SEPARATOR_CHAR + relativeId);