You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2011/11/28 18:46:16 UTC
svn commit: r1207481 - in /wicket/trunk/wicket-extensions/src:
main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java
test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
Author: pedro
Date: Mon Nov 28 17:46:15 2011
New Revision: 1207481
URL: http://svn.apache.org/viewvc?rev=1207481&view=rev
Log:
Preventing the AjaxEditableLabel from loose its model object type when initializing its editor component
Issue: WICKET-4259
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java
wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java?rev=1207481&r1=1207480&r2=1207481&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java Mon Nov 28 17:46:15 2011
@@ -30,6 +30,7 @@ import org.apache.wicket.markup.html.for
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.IObjectClassAwareModel;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.util.string.JavaScriptUtils;
@@ -391,7 +392,7 @@ public class AjaxEditableLabel<T> extend
{
if (editor == null)
{
- initLabelAndEditor(getDelegatingParentModel());
+ initLabelAndEditor(new WrapperModel());
}
return editor;
}
@@ -405,7 +406,7 @@ public class AjaxEditableLabel<T> extend
{
if (label == null)
{
- initLabelAndEditor(getDelegatingParentModel());
+ initLabelAndEditor(new WrapperModel());
}
return label;
}
@@ -420,7 +421,7 @@ public class AjaxEditableLabel<T> extend
// lazily add label and editor
if (editor == null)
{
- initLabelAndEditor(getDelegatingParentModel());
+ initLabelAndEditor(new WrapperModel());
}
// obsolete with WICKET-1919
// label.setEnabled(isEnabledInHierarchy());
@@ -510,35 +511,41 @@ public class AjaxEditableLabel<T> extend
}
/**
- * get a model that accesses the parent model lazily. this is required since we eventually
- * request the parents model before the component is added to the parent.
- *
- * @return model
+ * Model that accesses the parent model lazily. this is required since we eventually request the
+ * parents model before the component is added to the parent.
*/
- private IModel<T> getDelegatingParentModel()
+ private class WrapperModel implements IModel<T>, IObjectClassAwareModel<T>
{
- return new IModel<T>()
+
+ public T getObject()
{
- private static final long serialVersionUID = 1L;
+ return getParentModel().getObject();
+ }
- public T getObject()
- {
- return getParentModel().getObject();
- }
+ public void setObject(final T object)
+ {
+ getParentModel().setObject(object);
+ }
+
+ public void detach()
+ {
+ getParentModel().detach();
+
+ }
- public void setObject(final T object)
+ public Class<T> getObjectClass()
+ {
+ if (getParentModel() instanceof IObjectClassAwareModel)
{
- getParentModel().setObject(object);
+ return ((IObjectClassAwareModel)getParentModel()).getObjectClass();
}
-
- public void detach()
+ else
{
- getParentModel().detach();
+ return null;
}
- };
+ }
}
-
/**
* @return Gets the parent model in case no explicit model was specified.
*/
Modified: wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java?rev=1207481&r1=1207480&r2=1207481&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java (original)
+++ wicket/trunk/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java Mon Nov 28 17:46:15 2011
@@ -16,11 +16,18 @@
*/
package org.apache.wicket.extensions.ajax.markup.html;
+import java.util.Arrays;
+
import org.apache.wicket.Page;
import org.apache.wicket.WicketTestCase;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AbstractAjaxBehavior;
import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.IObjectClassAwareModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.IWritableRequestParameters;
+import org.apache.wicket.util.string.StringValue;
import org.junit.Before;
import org.junit.Test;
@@ -137,4 +144,34 @@ public class AjaxEditableTest extends Wi
tester.assertVisible("ajaxLabel:label");
tester.assertLabel("ajaxLabel:label", "something");
}
+
+ /**
+ * <a href="https://issues.apache.org/jira/browse/WICKET-4259">WICKET-4259</a>
+ */
+ @Test
+ public void testModelObjectClassInference()
+ {
+ class IntegerModel extends Model<Integer> implements IObjectClassAwareModel<Integer>
+ {
+
+ public Class<Integer> getObjectClass()
+ {
+ return Integer.class;
+ }
+ }
+ IModel<Integer> integerModel = new IntegerModel();
+ AjaxEditableLabel<Integer> editableLabel = new AjaxEditableLabel<Integer>("test",
+ integerModel);
+ editableLabel.getEditor().setVisible(true);
+
+ IWritableRequestParameters postParameters = (IWritableRequestParameters)tester.getRequestCycle()
+ .getRequest()
+ .getPostParameters();
+ postParameters.setParameterValues(editableLabel.getEditor().getInputName(),
+ Arrays.asList(new StringValue[] { StringValue.valueOf("5") }));
+ editableLabel.getEditor().processInput();
+
+ assertNotNull(integerModel.getObject());
+ assertTrue(integerModel.getObject() instanceof Integer);
+ }
}
\ No newline at end of file