You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2017/04/04 15:38:15 UTC
[8/8] wicket git commit: WICKET-6348 small improvements
WICKET-6348 small improvements
- check host component type
- getFormComponent() final
- new onError()
- support ListMultipleChoice
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c1d389d0
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c1d389d0
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c1d389d0
Branch: refs/heads/master
Commit: c1d389d09ee75f8fcbb58a1ebe9e1d5644563313
Parents: 9bc7ee4
Author: Sven Meier <sv...@apache.org>
Authored: Thu Mar 30 14:55:00 2017 +0200
Committer: Sven Meier <sv...@apache.org>
Committed: Tue Apr 4 17:30:04 2017 +0200
----------------------------------------------------------------------
.../form/FormComponentUpdatingBehavior.java | 73 +++++++++++++++-----
1 file changed, 56 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/c1d389d0/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentUpdatingBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentUpdatingBehavior.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentUpdatingBehavior.java
index e57828b..89a2174 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentUpdatingBehavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentUpdatingBehavior.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.html.form;
import org.apache.wicket.Component;
import org.apache.wicket.IRequestListener;
+import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
@@ -44,18 +45,24 @@ public class FormComponentUpdatingBehavior extends Behavior implements IRequestL
}
@Override
- public final void bind(final Component hostComponent)
+ public final void bind(final Component component)
{
- Args.notNull(hostComponent, "hostComponent");
+ Args.notNull(component, "component");
+
+ if (!(component instanceof FormComponent))
+ {
+ throw new WicketRuntimeException("Behavior " + getClass().getName()
+ + " can only be added to an instance of a FormComponent");
+ }
if (formComponent != null)
{
throw new IllegalStateException("this kind of handler cannot be attached to " +
"multiple components; it is already attached to component " + formComponent +
- ", but component " + hostComponent + " wants to be attached too");
+ ", but component " + component + " wants to be attached too");
}
- this.formComponent = (FormComponent<?>)hostComponent;
+ this.formComponent = (FormComponent<?>)component;
formComponent.setRenderBodyOnly(false);
@@ -63,11 +70,20 @@ public class FormComponentUpdatingBehavior extends Behavior implements IRequestL
onBind();
}
+ /**
+ * Called when the component was bound to it's host component. You can get the bound host
+ * component by calling {@link #getFormComponent()}.
+ */
protected void onBind()
{
}
- public FormComponent<?> getFormComponent()
+ /**
+ * Get the hosting component.
+ *
+ * @return hosting component
+ */
+ public final FormComponent<?> getFormComponent()
{
return formComponent;
}
@@ -101,7 +117,7 @@ public class FormComponentUpdatingBehavior extends Behavior implements IRequestL
*/
private String getJSEvent()
{
- if (formComponent instanceof DropDownChoice || formComponent instanceof AbstractTextComponent)
+ if (formComponent instanceof DropDownChoice || formComponent instanceof ListMultipleChoice|| formComponent instanceof AbstractTextComponent)
{
return "onchange";
}
@@ -135,23 +151,30 @@ public class FormComponentUpdatingBehavior extends Behavior implements IRequestL
*/
private void process()
{
- formComponent.validate();
- if (formComponent.isValid())
+ try
{
- if (getUpdateModel())
+ formComponent.validate();
+ if (formComponent.isValid())
{
- formComponent.valid();
- formComponent.updateModel();
+ if (getUpdateModel())
+ {
+ formComponent.valid();
+ formComponent.updateModel();
+ }
+
+ onUpdate();
+ }
+ else
+ {
+ formComponent.invalid();
+
+ onError(null);
}
-
- onUpdate();
}
- else
+ catch (RuntimeException e)
{
- formComponent.invalid();
+ onError(e);
}
-
- onUpdate();
}
/**
@@ -173,6 +196,22 @@ public class FormComponentUpdatingBehavior extends Behavior implements IRequestL
{
}
+ /**
+ * Hook method invoked when updating of the component resulted in an error.
+ * <p>
+ * The {@link RuntimeException} will be null if it was just a validation or conversion error of the
+ * FormComponent.
+ *
+ * @param e optional runtime exception
+ */
+ protected void onError(RuntimeException e)
+ {
+ if (e != null)
+ {
+ throw e;
+ }
+ }
+
@Override
public final void onRequest()
{