You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/10/29 12:37:34 UTC

git commit: ISIS-560: choices now re-rendered ok if there is a validation error...

Updated Branches:
  refs/heads/master ecc55d1e5 -> 636a5da68


ISIS-560: choices now re-rendered ok if there is a validation error...

... elsewhere for another parameter of the action.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/636a5da6
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/636a5da6
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/636a5da6

Branch: refs/heads/master
Commit: 636a5da6815144f0fb126ab02a63204ba7559b57
Parents: ecc55d1
Author: Dan Haywood <da...@apache.org>
Authored: Tue Oct 29 10:58:52 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Oct 29 10:58:52 2013 +0000

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java | 13 ++++++++++++-
 .../scalars/ScalarPanelTextFieldAbstract.java   |  3 +--
 .../entitylink/EntityLinkSelect2Panel.java      | 20 +++++++++++++++++++-
 .../valuechoices/ValueChoicesSelect2Panel.java  | 17 ++++++++++++++---
 4 files changed, 46 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/636a5da6/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index e519d47..981e137 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -143,7 +143,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
 
     @Override
     protected void onBeforeRender() {
-        if (!hasBeenRendered()) {
+        if (!hasBeenRendered() || alwaysRebuildGui()) {
             buildGui();
         }
         final ScalarModel scalarModel = getModel();
@@ -161,6 +161,17 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     }
 
     /**
+     * hook for highly dynamic components, eg conditional choices.
+     * 
+     * <p>
+     * Returning <tt>true</tt> means that the component is always rebuilt prior to
+     * every {@link #onBeforeRender() render}ing.
+     */
+    protected boolean alwaysRebuildGui() {
+        return false;
+    }
+
+    /**
      * Builds GUI lazily prior to first render.
      * 
      * <p>

http://git-wip-us.apache.org/repos/asf/isis/blob/636a5da6/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 0265e7a..2bd7c5e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -136,8 +136,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     private void setRequiredIfSpecified() {
         final ScalarModel scalarModel = getModel();
         final boolean required = scalarModel.isRequired();
-        // have removed this because it seems to trip up rendering of any choices fields
-        //textField.setRequired(required);
+        textField.setRequired(required);
     }
 
     protected void setTextFieldSizeIfSpecified(AbstractTextComponent<T> textField) {

http://git-wip-us.apache.org/repos/asf/isis/blob/636a5da6/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
index 8ed6f75..6e7f67f 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
@@ -199,6 +199,24 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
                 settings.setPlaceholder(scalarModel.getName());
             }
             addOrReplace(select2Field);
+        } else {
+            //
+            // the select2Field already exists, so the widget has been rendered before.  If it is
+            // being re-rendered now, it may be because some other property/parameter was invalid.
+            // when the form was submitted, the selected object (its oid as a string) would have
+            // been saved as rawInput.  If the property/parameter had been valid, then this rawInput
+            // would be correctly converted and processed by the select2Field's choiceProvider.  However,
+            // an invalid property/parameter means that the webpage is re-rendered in another request,
+            // and the rawInput can no longer be interpreted.  The net result is that the field appears
+            // with no input.
+            //
+            // The fix is therefore (I think) simply to clear any rawInput, so that the select2Field
+            // renders its state from its model.
+            //
+            // see: FormComponent#getInputAsArray()
+            // see: Select2Choice#renderInitializationScript()
+            //
+            select2Field.clearInput();
         }
         
         
@@ -222,7 +240,7 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
                 final ObjectSpecification typeOfSpecification = entityModel.getTypeOfSpecification();
                 final AutoCompleteFacet autoCompleteFacet = typeOfSpecification.getFacet(AutoCompleteFacet.class);
                 final List<ObjectAdapter> results = autoCompleteFacet.execute(term);
-                return Lists.transform(results, MementoFunctions.fromAdapter());
+                return Lists.transform(results, ObjectAdapterMemento.Functions.fromAdapter());
             }
 
         };

http://git-wip-us.apache.org/repos/asf/isis/blob/636a5da6/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index 919ce24..fbc3453 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -66,10 +66,16 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
 
         final IModel<ObjectAdapterMemento> modelObject = ScalarModelWithPending.Util.createModel(this);
         final ObjectAdapter[] actionArgsHint = getScalarModel().getActionArgsHint();
-        select2Field = new Select2Choice<ObjectAdapterMemento>(ID_VALUE_ID, modelObject);
-        setChoices(actionArgsHint);
+        
+        // same pattern as in EntityLinkSelect2Panel
+        if(select2Field == null) {
+            select2Field = new Select2Choice<ObjectAdapterMemento>(ID_VALUE_ID, modelObject);
+            setChoices(actionArgsHint);
+            addStandardSemantics();
+        } else {
+            select2Field.clearInput();
+        }
 
-        addStandardSemantics();
 
         final FormComponentLabel labelIfRegular = createFormComponentLabel();
         if(getModel().isRequired()) {
@@ -157,6 +163,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
     }
 
     @Override
+    protected boolean alwaysRebuildGui() {
+        return true;
+    }
+
+    @Override
     protected void onBeforeRenderWhenViewMode() { // View: Read only
         select2Field.setEnabled(false);
     }