You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/02/04 22:10:39 UTC
svn commit: r1067286 - in /myfaces/core/trunk/impl/src:
main/java/org/apache/myfaces/view/facelets/tag/composite/
test/java/org/apache/myfaces/view/facelets/tag/composite/
test/resources/org/apache/myfaces/view/facelets/tag/composite/
test/resources/or...
Author: lu4242
Date: Fri Feb 4 21:10:39 2011
New Revision: 1067286
URL: http://svn.apache.org/viewvc?rev=1067286&view=rev
Log:
MYFACES-3027 cc:attribute type="java.lang.Integer" does not enforce Integer when value is taken from facelets template
Modified:
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/AttributeHandler.java
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentRule.java
myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentTestCase.java
myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttribute.xhtml
myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttribute.xhtml
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/AttributeHandler.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/AttributeHandler.java?rev=1067286&r1=1067285&r2=1067286&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/AttributeHandler.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/AttributeHandler.java Fri Feb 4 21:10:39 2011
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.el.ValueExpression;
import javax.faces.application.ProjectStage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
@@ -37,6 +38,7 @@ import javax.faces.view.facelets.TagHand
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletAttribute;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletTag;
import org.apache.myfaces.view.facelets.FaceletCompositionContext;
+import org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage;
/**
* @author Leonardo Uribe (latest modification by $Author$)
@@ -318,7 +320,36 @@ public class AttributeHandler extends Ta
}
if (_default != null)
{
- attributeDescriptor.setValue("default", _default.getValueExpression(ctx, String.class));
+ if (_type != null)
+ {
+ String type = _type.getValue(ctx);
+ Class clazz = String.class;
+ if (type != null)
+ {
+ try
+ {
+ clazz = FaceletViewDeclarationLanguage._javaTypeToClass(type);
+ }
+ catch (ClassNotFoundException e)
+ {
+ //Assume String
+ }
+ }
+
+ if (_default.isLiteral())
+ {
+ //If it is literal, calculate it and store it on a ValueExpression
+ attributeDescriptor.setValue("default", _default.getObject(ctx, clazz));
+ }
+ else
+ {
+ attributeDescriptor.setValue("default", _default.getValueExpression(ctx, clazz));
+ }
+ }
+ else
+ {
+ attributeDescriptor.setValue("default", _default.getValueExpression(ctx, String.class));
+ }
}
if (_required != null)
{
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentRule.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentRule.java?rev=1067286&r1=1067285&r2=1067286&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentRule.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentRule.java Fri Feb 4 21:10:39 2011
@@ -56,6 +56,25 @@ final class CompositeComponentRule exten
// ctx.getFacesContext().getApplication().getExpressionFactory().createValueExpression(_value, Object.class));
}
}
+
+ final class TypedLiteralAttributeMetadata extends Metadata
+ {
+ private final String _name;
+ private final TagAttribute _attr;
+ private final Class<?> _type;
+
+ public TypedLiteralAttributeMetadata(String name, Class<?> type, TagAttribute attr)
+ {
+ _name = name;
+ _attr = attr;
+ _type = type;
+ }
+
+ public void applyMetadata(FaceletContext ctx, Object instance)
+ {
+ ((UIComponent) instance).getAttributes().put(_name, _attr.getObject(ctx, _type));
+ }
+ }
final static class ValueExpressionMetadata extends Metadata
{
@@ -116,11 +135,21 @@ final class CompositeComponentRule exten
}
else if (meta.getWriteMethod(name) == null)
{
+ Class<?> type = meta.getPropertyType(name);
+ if (type == null)
+ {
+ if (meta.getProperty(name) == null)
+ {
+ // this was an attribute literal, but not property
+ warnAttr(attribute, meta.getTargetClass(), name);
+ }
- // this was an attribute literal, but not property
- warnAttr(attribute, meta.getTargetClass(), name);
-
- return new LiteralAttributeMetadata(name, attribute.getValue());
+ return new LiteralAttributeMetadata(name, attribute.getValue());
+ }
+ else
+ {
+ return new TypedLiteralAttributeMetadata(name, type, attribute);
+ }
}
}
return null;
Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentTestCase.java?rev=1067286&r1=1067285&r2=1067286&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentTestCase.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/tag/composite/CompositeComponentTestCase.java Fri Feb 4 21:10:39 2011
@@ -22,6 +22,7 @@ package org.apache.myfaces.view.facelets
import java.io.StringWriter;
import javax.el.MethodExpression;
+import javax.el.ValueExpression;
import javax.faces.component.UICommand;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
@@ -102,6 +103,12 @@ public class CompositeComponentTestCase
Assert.assertEquals("class1", text1.getStyleClass());
//set as default
Assert.assertEquals("background:red", text1.getStyle());
+ //Check coercion of attribute using type value
+ Assert.assertEquals(5, compositeComponent1.getAttributes().get("index"));
+ //Check default coercion
+ ValueExpression ve = facesContext.getApplication().getExpressionFactory().createValueExpression(
+ facesContext.getELContext(), "#{cc.attrs.cols}", Object.class);
+ Assert.assertEquals(1, ve.getValue(facesContext.getELContext()));
text1.popComponentFromEL(facesContext);
facet1.popComponentFromEL(facesContext);
compositeComponent1.popComponentFromEL(facesContext);
Modified: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttribute.xhtml
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttribute.xhtml?rev=1067286&r1=1067285&r2=1067286&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttribute.xhtml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/resources/testComposite/simpleAttribute.xhtml Fri Feb 4 21:10:39 2011
@@ -24,6 +24,8 @@
<composite:interface>
<composite:attribute name="style" default="background:red"/>
<composite:attribute name="styleClass" />
+ <composite:attribute name="index" type="java.lang.Integer"/>
+ <composite:attribute name="cols" type="java.lang.Integer" default="1"/>
</composite:interface>
<composite:implementation>
<h:outputText id="text" value="Hello World" style="#{cc.attrs.style}" styleClass="#{cc.attrs.styleClass}"/>
Modified: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttribute.xhtml
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttribute.xhtml?rev=1067286&r1=1067285&r2=1067286&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttribute.xhtml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/tag/composite/testSimpleAttribute.xhtml Fri Feb 4 21:10:39 2011
@@ -22,7 +22,7 @@
</head>
<body>
<h:panelGroup id="testGroup1">
-<testComposite:simpleAttribute styleClass="class1">
+<testComposite:simpleAttribute styleClass="class1" index="5">
</testComposite:simpleAttribute>
</h:panelGroup>