You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2012/08/29 19:08:39 UTC

svn commit: r1378650 - in /empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2: controls/InputControl.java utils/TagEncodingHelper.java

Author: doebele
Date: Wed Aug 29 17:08:38 2012
New Revision: 1378650

URL: http://svn.apache.org/viewvc?rev=1378650&view=rev
Log:
EMPIREDB-157 
JSF2 find the correct composite Component Parent

Modified:
    empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
    empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java

Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java?rev=1378650&r1=1378649&r2=1378650&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java Wed Aug 29 17:08:38 2012
@@ -343,8 +343,8 @@ public abstract class InputControl
             input.setLocalValueSet(false);
             input.setValueExpression("value", (ValueExpression)value);
             
-            Object check = ((ValueExpression)value).getValue(FacesContext.getCurrentInstance().getELContext());
-            log.info("Expression value is {}.", check);
+            // Object check = ((ValueExpression)value).getValue(FacesContext.getCurrentInstance().getELContext());
+            // log.info("Expression value is {}.", check);
         }    
         else
         {   // Set the value

Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java?rev=1378650&r1=1378649&r2=1378650&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java Wed Aug 29 17:08:38 2012
@@ -68,6 +68,10 @@ import org.apache.empire.jsf2.controls.T
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.sun.faces.component.CompositeComponentStackManager;
+import com.sun.faces.facelets.el.ContextualCompositeValueExpression;
+import com.sun.faces.facelets.el.TagValueExpression;
+
 public class TagEncodingHelper implements NamingContainer
 {
     /**
@@ -805,13 +809,31 @@ public class TagEncodingHelper implement
         String expr = ve.getExpressionString();
         while (expr.startsWith(CC_ATTR_EXPR))
         {
+            // Unwrap
+            if (ve instanceof TagValueExpression)
+                ve = ((TagValueExpression)ve).getWrapped();
             // find parent
-            parent = UIComponent.getCompositeComponentParent(parent);
+            if (ve instanceof ContextualCompositeValueExpression)
+            {
+                FacesContext ctx = FacesContext.getCurrentInstance();
+                ContextualCompositeValueExpression ccve = (ContextualCompositeValueExpression)ve;
+                CompositeComponentStackManager manager = CompositeComponentStackManager.getManager(ctx);
+                UIComponent cc = manager.findCompositeComponentUsingLocation(ctx, ccve.getLocation());
+                // set Parent
+                parent = cc;
+            }
+            else
+            {   // find parent
+                parent = UIComponent.getCompositeComponentParent(parent);
+            }
             if (parent == null)
                 return null;
             // check expression
             int end = expr.indexOf('}');
             String attrib = expr.substring(CC_ATTR_EXPR.length(), end);
+            if (attrib.indexOf('.')>0)
+                return ve; // do not investigate any further
+            // find attribute 
             ve = parent.getValueExpression(attrib);
             if (ve == null)
                 return null;