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;
}