You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2011/03/17 15:24:49 UTC

svn commit: r1082501 - in /myfaces/tobago/trunk: tobago-example/tobago-example-test/src/main/java/org/apache/myfaces/tobago/example/test/ tobago-example/tobago-example-test/src/main/webapp/tc/attribute/ tobago-extension/tobago-facelets/src/main/java/or...

Author: lofwyr
Date: Thu Mar 17 14:24:49 2011
New Revision: 1082501

URL: http://svn.apache.org/viewvc?rev=1082501&view=rev
Log:
TOBAGO-980: tc:attribute mode="valueIfSet" not working in some cases

Added:
    myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/mode-valueIfSet.xhtml
      - copied, changed from r1081838, myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/attribute.xhtml
Modified:
    myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/java/org/apache/myfaces/tobago/example/test/Attribute.java
    myfaces/tobago/trunk/tobago-extension/tobago-facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/java/org/apache/myfaces/tobago/example/test/Attribute.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/java/org/apache/myfaces/tobago/example/test/Attribute.java?rev=1082501&r1=1082500&r2=1082501&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/java/org/apache/myfaces/tobago/example/test/Attribute.java (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/java/org/apache/myfaces/tobago/example/test/Attribute.java Thu Mar 17 14:24:49 2011
@@ -45,4 +45,8 @@ public class Attribute {
   public void setCondition(boolean condition) {
     this.condition = condition;
   }
+  
+  public String getValue() {
+    return "value from model";
+  }
 }

Copied: myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/mode-valueIfSet.xhtml (from r1081838, myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/attribute.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/mode-valueIfSet.xhtml?p2=myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/mode-valueIfSet.xhtml&p1=myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/attribute.xhtml&r1=1081838&r2=1082501&rev=1082501&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/attribute.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-test/src/main/webapp/tc/attribute/mode-valueIfSet.xhtml Thu Mar 17 14:24:49 2011
@@ -23,59 +23,90 @@
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:c="http://java.sun.com/jstl/core">
 
-  <tc:page>
+  <tc:page id="page">
     <f:facet name="layout">
-      <tc:gridLayout rows="auto;auto;auto;auto;auto;auto;*" columns="250px;*"/>
+      <tc:gridLayout rows="auto"/>
     </f:facet>
     <tc:gridLayoutConstraint width="600px" height="300px"/>
 
-    <tc:label value="condition"/>
-    <tc:panel>
+    <tc:label value="demo of the valueIfSet mode of tc:attribute (facelets only)"/>
+
+    <tc:box label="value">
       <f:facet name="layout">
-        <tc:gridLayout columns="*;*"/>
+        <tc:gridLayout rows="auto;auto;auto;auto;auto;auto;*" columns="250px;*"/>
       </f:facet>
-      <tc:selectBooleanCheckbox value="#{attribute.condition}"/>
-      <tc:button label="update"/>
-    </tc:panel>
-
-    <tc:label value="simple output"/>
-    <tc:in readonly="true">
-      <tc:attribute name="value" value="Some Value from the tc:attribute"/>
-    </tc:in>
-
-    <tc:label value="output over EL"/>
-    <tc:in readonly="true">
-      <tc:attribute name="value" value="#{attribute.counter}"/>
-    </tc:in>
-
-    <tc:label value="action"/>
-    <tc:button label="Click">
-      <tc:attribute name="action" value="#{attribute.reload}"/>
-    </tc:button>
-
-    <tc:label value="conditional action (#{attribute.condition})"/>
-    <tc:button label="Click">
-      <c:if test="#{attribute.condition}">
-        <tc:attribute name="action" value="#{attribute.reload}"/>
-      </c:if>
-    </tc:button>
-
-    <tc:label value="conditional action not (#{not attribute.condition})"/>
-    <tc:button label="Click">
-      <c:if test="#{not attribute.condition}">
-        <tc:attribute name="action" value="#{attribute.reload}"/>
-      </c:if>
-    </tc:button>
-
-    <tc:label value="conditional action (#{attribute.condition}) and link not (#{not attribute.condition})"/>
-    <tc:button label="Click">
-      <c:if test="#{attribute.condition}">
-        <tc:attribute name="action" value="#{attribute.reload}"/>
-      </c:if>
-      <c:if test="#{not attribute.condition}">
-        <tc:attribute name="link" value="/"/>
-      </c:if>   
-    </tc:button>
+
+      <tc:label value="value"/>
+      <tc:in>
+        <tc:attribute name="value" value="direct literal" mode="valueIfSet"/>
+      </tc:in>
+
+      <c:set var="value1" value="from var"/>
+      <tc:label value="value"/>
+      <tc:in>
+        <tc:attribute name="value" value="#{value1}" mode="valueIfSet"/>
+      </tc:in>
+
+      <c:set var="value2" value="#{value1}"/>
+      <tc:label value="value"/>
+      <tc:in>
+        <tc:attribute name="value" value="#{value2}" mode="valueIfSet"/>
+      </tc:in>
+
+      <c:set var="value3" value="#{value1} ++"/>
+      <tc:label value="value"/>
+      <tc:in>
+        <tc:attribute name="value" value="#{value3}" mode="valueIfSet"/>
+      </tc:in>
+
+      <c:set var="value4" value="#{attribute.value}"/>
+      <tc:label value="value"/>
+      <tc:in>
+        <tc:attribute name="value" value="#{value4}" mode="valueIfSet"/>
+      </tc:in>
+
+      <tc:label value="value (undefined)"/>
+      <tc:in>
+        <tc:attribute name="value" value="#{value_undefined}" mode="valueIfSet"/>
+      </tc:in>
+
+    </tc:box>
+
+    <tc:box label="id" id="id-box">
+      <f:facet name="layout">
+        <tc:gridLayout rows="auto;auto;auto;auto;auto;auto;*" columns="250px;*"/>
+      </f:facet>
+
+      <tc:label value="id"/>
+      <tc:in>
+        <tc:attribute name="id" value="my_number_1" mode="valueIfSet"/>
+      </tc:in>
+
+      <tc:label value="id (not implemented)"/>
+      <tc:in>
+        <tc:attribute name="id" value="#{'my_number_2'}" mode="valueIfSet"/>
+      </tc:in>
+
+      <c:set var="id3" value="my_number_3"/>
+      <tc:label value="id"/>
+      <tc:in>
+        <tc:attribute name="id" value="#{id3}" mode="valueIfSet"/>
+      </tc:in>
+
+      <tc:label value="id (undefined)"/>
+      <tc:in>
+        <tc:attribute name="id" value="#{id_undefined}" mode="valueIfSet"/>
+      </tc:in>
+
+    </tc:box>
+
+    <tc:script onload="check()">
+      function check() {
+        jQuery("#page\\:id-box input").each(function() {
+          jQuery(this).attr('value', (jQuery(this).attr('id')));
+        });
+      }
+    </tc:script>
 
   </tc:page>
 </f:view>

Modified: myfaces/tobago/trunk/tobago-extension/tobago-facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-extension/tobago-facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java?rev=1082501&r1=1082500&r2=1082501&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-extension/tobago-facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java (original)
+++ myfaces/tobago/trunk/tobago-extension/tobago-facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java Thu Mar 17 14:24:49 2011
@@ -181,29 +181,27 @@ public final class AttributeHandler exte
           }
         } else if ("valueIfSet".equals(mode.getValue())) {
           String expressionString = value.getValue();
-          while (isSimpleExpression(expressionString)) {
-            if (isMethodOrValueExpression(expressionString)) {
-              ValueExpression expression
-                  = faceletContext.getVariableMapper().resolveVariable(removeElParenthesis(expressionString));
-              if (expression == null) {
-                if (LOG.isDebugEnabled()) {
-                  // when the action hasn't been set while using a composition.
-                  LOG.debug("Variable can't be resolved: value='" + expressionString + "'");
-                }
-                expressionString = null;
-                break;
-              } else {
-                expressionString = expression.getExpressionString();
+          while (isMethodOrValueExpression(expressionString) && isSimpleExpression(expressionString)) {
+            ValueExpression expression
+                = faceletContext.getVariableMapper().resolveVariable(removeElParenthesis(expressionString));
+            if (expression == null) {
+              if (LOG.isDebugEnabled()) {
+                // when the action hasn't been set while using a composition.
+                LOG.debug("Variable can't be resolved: value='" + expressionString + "'");
               }
-            } else {
-              LOG.warn("Only expressions are supported mode=valueIfSet value='" + expressionString + "'");
               expressionString = null;
               break;
+            } else {
+              expressionString = expression.getExpressionString();
             }
           }
           if (expressionString != null) {
-            ValueExpression expression = value.getValueExpression(faceletContext, Object.class);
-            ELAdaptor.setExpression(parent, name.getValue(faceletContext), expression);
+            if (containsMethodOrValueExpression(expressionString)) {
+              ValueExpression expression = value.getValueExpression(faceletContext, Object.class);
+              ELAdaptor.setExpression(parent, name.getValue(faceletContext), expression);
+            } else {
+              parent.getAttributes().put(name.getValue(faceletContext), expressionString);
+            }
           }
         } else {
           throw new FacesException("Type " + mode + " not suppored");
@@ -283,6 +281,11 @@ public final class AttributeHandler exte
     return (string.startsWith("${") || string.startsWith("#{")) && string.endsWith("}");
   }
 
+  private boolean containsMethodOrValueExpression(String string) {
+    return (StringUtils.contains(string, "${") || StringUtils.contains(string, "#{"))
+        && StringUtils.contains(string, "}");
+  }
+
   private boolean isSimpleExpression(String string) {
     return string.indexOf('.') < 0 && string.indexOf('[') < 0;
   }