ISIS-1224 Upgrade select2 from v3.5.2 to v4 In ActionParametersFormPanel do not repaint the complete ReferencePanel/ValueChoicesSelect2Panel but just its Select2 child component. It the complete parent is repainted then Select2 JS widget somehow looses information about the parent DOM element and renders the drop-down as orphan, i.e. CSS: position:absolute; left:0; top:0;
If only the Select2Choice element is repainted then it just sends its new values as JSON back and doesn't recreate the complete widget but just its options. The flow is: 1) the user types something in another field 2) the user clicks on Select2 2.1) the 'change' JS event for the first field fires Ajax call 2.1.1) with the old behavior the Ajax response repaints the whole ReferencePanel 2.1.2) with the new behavior the Ajax response repaints only the Select2 options 2.2) the click on Select2 opens its drop-down 2.3) the Ajax response for 2.1) comes and closes Select2 to update it 3) with the new behavior the user has to click second time to show the drop-down again, but at least its CSS position is correct Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/7b5bfad7 Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/7b5bfad7 Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/7b5bfad7 Branch: refs/heads/master Commit: 7b5bfad70743279c59cfe3e520ba7feb63098529 Parents: 17d7159 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Sun Dec 13 15:21:52 2015 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Sun Dec 13 15:21:52 2015 +0100 ---------------------------------------------------------------------- .../ui/components/actions/ActionParametersFormPanel.java | 4 ++-- .../ui/components/scalars/ScalarPanelAbstract.java | 9 +++++++++ .../ui/components/scalars/reference/ReferencePanel.java | 11 ++++++++++- .../ui/components/widgets/select2/Select2ChoiceUtil.java | 1 + .../widgets/valuechoices/ValueChoicesSelect2Panel.java | 11 +++++++++++ 5 files changed, 33 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java index d1d7020..a8cde09 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java @@ -242,8 +242,8 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> { // this could throw a ConcurrencyException as we may have to reload the // object adapter of the action in order to compute the choices // (and that object adapter might have changed) - if(paramPanel.updateChoices(pendingArguments)) { - target.add(paramPanel); + if (paramPanel.updateChoices(pendingArguments)) { + paramPanel.repaint(target); } } } http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java index a9df6fa..13d117c 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java @@ -386,6 +386,15 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp return false; } + /** + * Repaints this panel of just some of its children + * + * @param target The Ajax request handler + */ + public void repaint(AjaxRequestTarget target) { + target.add(this); + } + // /////////////////////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java index 937f990..667b4fe 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java @@ -24,6 +24,7 @@ import java.util.List; import javax.inject.Inject; import com.google.common.collect.Lists; +import org.apache.wicket.ajax.AjaxRequestTarget; import org.wicketstuff.select2.ChoiceProvider; import org.wicketstuff.select2.Select2Choice; import org.wicketstuff.select2.Settings; @@ -534,5 +535,13 @@ public class ReferencePanel extends ScalarPanelAbstract { return IsisContext.getConfiguration(); } - + /** + * Repaints just the Select2 component + * + * @param target The Ajax request handler + */ + @Override + public void repaint(AjaxRequestTarget target) { + target.add(select2Field); + } } http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java index 0c059d3..c8ef4d7 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java @@ -35,6 +35,7 @@ public final class Select2ChoiceUtil { public static Select2Choice<ObjectAdapterMemento> newSelect2Choice(String id, final IModel<ObjectAdapterMemento> modelObject, ScalarModel scalarModel) { Select2Choice<ObjectAdapterMemento> select2Choice = new Select2Choice<>(id, modelObject, EmptyChoiceProvider.INSTANCE); select2Choice.setRequired(scalarModel.isRequired()); + select2Choice.setOutputMarkupPlaceholderTag(true); return select2Choice; } http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java index cbfa213..c8f51a1 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java @@ -26,6 +26,7 @@ import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; +import org.apache.wicket.ajax.AjaxRequestTarget; import org.wicketstuff.select2.ChoiceProvider; import org.wicketstuff.select2.Select2Choice; @@ -247,6 +248,16 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca } /** + * Repaints just the Select2 component + * + * @param target The Ajax request handler + */ + @Override + public void repaint(AjaxRequestTarget target) { + target.add(select2Field); + } + + /** * sets up the choices, also ensuring that any currently held value * is compatible. */
