Author: pedro
Date: Mon Dec 13 12:43:51 2010
New Revision: 1045098
URL: http://svn.apache.org/viewvc?rev=1045098&view=rev
Log:
- Preventing the attempt to resolve the property class for a null target at
AbstractPropertyModel
- Test asserting that there is no problem in working with an
AbstractPropertyModel targeting an IObjectClassAwareModel not initialized with
an known class.
Issue: WICKET-3253
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java
wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java?rev=1045098&r1=1045097&r2=1045098&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java
Mon Dec 13 12:43:51 2010
@@ -247,8 +247,11 @@ public abstract class AbstractPropertyMo
{
try
{
- return
PropertyResolver.getPropertyClass(expression,
-
((IObjectClassAwareModel<?>)this.target).getObjectClass());
+ Class<?> targetClass =
((IObjectClassAwareModel<?>)this.target).getObjectClass();
+ if (targetClass != null)
+ {
+ return
PropertyResolver.getPropertyClass(expression, targetClass);
+ }
}
catch (WicketRuntimeException e)
{
Modified:
wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java?rev=1045098&r1=1045097&r2=1045098&view=diff
==============================================================================
---
wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java
(original)
+++
wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java
Mon Dec 13 12:43:51 2010
@@ -21,12 +21,12 @@ import java.io.Serializable;
import junit.framework.TestCase;
/**
- * https://issues.apache.org/jira/browse/WICKET-2937
- *
* <p>
* If AbstractPropertyModel has an target that implements the
IObjectClassAwareModel interface then
* the class of that target is used to infer the modeled property type.
+ * </p>
*
+ * @see <a
href="https://issues.apache.org/jira/browse/WICKET-2937">WICKET-2937</a>
* @author Pedro Santos
*/
public class AbstractPropertyModelObjectClassTest extends TestCase
@@ -63,6 +63,24 @@ public class AbstractPropertyModelObject
"someProperty").getObjectClass());
}
+ /**
+ * Asserting that there is no problem in working with an
AbstractPropertyModel targeting an
+ * IObjectClassAwareModel not initialized with an known class.
+ *
+ * @see <a
href="https://issues.apache.org/jira/browse/WICKET-3253">WICKET-3253</a>
+ */
+ public void testLazyClassResolution()
+ {
+ Model<CustomBean> modelCustomBean = new Model<CustomBean>(null);
+ PropertyModel<CustomType> customTypeModel = new
PropertyModel<CustomType>(modelCustomBean,
+ "customType");
+ PropertyModel<Integer> somePropertyModel = new
PropertyModel<Integer>(customTypeModel,
+ "someProperty");
+ assertNull(somePropertyModel.getObjectClass());
+ modelCustomBean.setObject(new CustomBean());
+ assertEquals(Integer.class, somePropertyModel.getObjectClass());
+ }
+
private static class CustomType implements Serializable
{
private Integer someProperty;