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