You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by re...@apache.org on 2026/09/23 16:09:37 UTC
(wicket) 02/02: Validate the number in the editable label example
This is an automated email from the ASF dual-hosted git repository.
reiern70 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
commit 6550afd842ff15dc807dce8f549f87dbeb4523b1
Author: reiern70 <re...@gmail.com>
AuthorDate: Wed Sep 16 14:36:49 2026 -0500
Validate the number in the editable label example
Integer.parseInt threw a NumberFormatException, which Wicket does not
treat as a conversion error, so invalid input failed the request. The
converter now throws a ConversionException, the field is required, and
errors are shown in a feedback panel.
---
.../examples/ajax/builtin/EditableLabelPage.html | 1 +
.../examples/ajax/builtin/EditableLabelPage.java | 46 ++++++++++++--
.../ajax/builtin/EditableLabelPageTest.java | 71 ++++++++++++++++++++++
3 files changed, 112 insertions(+), 6 deletions(-)
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html
index 86913e89c6..2c17aa79e2 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<wicket:extend xmlns:wicket="http://wicket.apache.org">
<form wicket:id="form">
+<div wicket:id="feedback"></div>
<p>
Click on the area with a green outline to begin an inplace edit. Press enter or outside the area to save, pless esc to cancel.
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
index fbfaccb5b5..ed30543a90 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
@@ -20,13 +20,16 @@ import java.util.Arrays;
import java.util.List;
import java.util.Locale;
+import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableChoiceLabel;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableMultiLineLabel;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
import org.apache.wicket.util.convert.ConversionException;
import org.apache.wicket.util.convert.IConverter;
@@ -62,18 +65,34 @@ public class EditableLabelPage extends BasePage
form.add(new AjaxEditableMultiLineLabel("text3"));
form.add(new AjaxEditableChoiceLabel<>("site", SITES));
- form.add(new AjaxEditableLabel<Integer>("number") {
+ final FeedbackPanel feedback = new FeedbackPanel("feedback");
+ feedback.setOutputMarkupId(true);
+ form.add(feedback);
+
+ AjaxEditableLabel<Integer> numberLabel = new AjaxEditableLabel<Integer>("number")
+ {
@Override
protected IConverter<?> createConverter(Class<?> type)
{
- return new IConverter<Integer>() {
+ return new IConverter<Integer>()
+ {
@Override
public Integer convertToObject(String value, Locale locale)
throws ConversionException
{
- return Integer.parseInt(value);
+ try
+ {
+ return Integer.parseInt(value);
+ }
+ catch (NumberFormatException e)
+ {
+ throw new ConversionException(e).setSourceValue(value)
+ .setTargetType(Integer.class)
+ .setConverter(this)
+ .setLocale(locale);
+ }
}
-
+
@Override
public String convertToString(Integer value, Locale locale)
{
@@ -81,8 +100,23 @@ public class EditableLabelPage extends BasePage
}
};
}
- });
-
+
+ @Override
+ protected void onSubmit(AjaxRequestTarget target)
+ {
+ super.onSubmit(target);
+ target.add(feedback);
+ }
+
+ @Override
+ protected void onError(AjaxRequestTarget target)
+ {
+ super.onError(target);
+ target.add(feedback);
+ }
+ };
+ form.add(numberLabel);
+ numberLabel.setType(Integer.class).setRequired(true).setLabel(Model.of("Number"));
form.add(new Label("refresh-counter", () -> "" + refreshCounter));
diff --git a/wicket-examples/src/test/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPageTest.java b/wicket-examples/src/test/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPageTest.java
new file mode 100644
index 0000000000..fd55e467f3
--- /dev/null
+++ b/wicket-examples/src/test/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPageTest.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.examples.ajax.builtin;
+
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests the number editor of {@link EditableLabelPage}.
+ */
+class EditableLabelPageTest extends WicketTestCase
+{
+ @Test
+ void rejectsANumberThatIsNotAnInteger()
+ {
+ saveNumber("abc");
+
+ tester.assertErrorMessages("The value of 'Number' is not a valid Integer.");
+ tester.assertVisible("form:number:editor");
+ tester.assertComponentOnAjaxResponse("form:feedback");
+ }
+
+ @Test
+ void rejectsAnEmptyNumber()
+ {
+ saveNumber("");
+
+ tester.assertErrorMessages("'Number' is required.");
+ tester.assertVisible("form:number:editor");
+ }
+
+ @Test
+ void acceptsAnInteger()
+ {
+ saveNumber("7");
+
+ tester.assertNoErrorMessage();
+ tester.assertInvisible("form:number:editor");
+ tester.assertLabel("form:number:label", "0000000007");
+ }
+
+ private void saveNumber(String value)
+ {
+ tester.startPage(EditableLabelPage.class);
+ tester.executeAjaxEvent("form:number:label", "click");
+
+ FormComponent<?> editor = (FormComponent<?>)tester
+ .getComponentFromLastRenderedPage("form:number:editor");
+ tester.getRequest().setParameter(editor.getInputName(), value);
+ tester.getRequest().setParameter("save", "true");
+ tester.getRequest().setMethod(Form.METHOD_GET);
+ tester.executeBehavior((AbstractAjaxBehavior)editor.getBehaviorById(0));
+ }
+}