This is an automated email from the ASF dual-hosted git repository.
bitstorm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push:
new 987618e3ee WICKET-7191 move part of the logic of HTML5Attributes to
FormComponet hierarchy (#1546)
987618e3ee is described below
commit 987618e3ee1d4d85137c8a63dfe08879f2c222ed
Author: Andrea Del Bene <[email protected]>
AuthorDate: Thu Oct 8 17:34:11 2026 +0200
WICKET-7191 move part of the logic of HTML5Attributes to FormComponet
hierarchy (#1546)
* WICKET-7191 Apply tag attribute "required" when a component is set to
required
* Moved HTML5Attributes tags to FormComponent#onComponentTag and
deprecated HTML5Attributes
* Upgrade japicmp compatibility dependency version to 11.0.0-SNAPSHOT
* using component hierarchy in the proper way
* removing deprecate from HTML5Attributes
* Declared jspecify version explicitly
* pom aligned
* removed dead code
* fix tests for markup escaping
---------
Co-authored-by: Andrea Del Bene <[email protected]>
---
pom.xml | 1 +
.../ajax/form/AjaxFormSubmitTestPage_expected.html | 6 ++--
.../html/form/AutoLabelEscapeAttributeTest.java | 10 +++----
.../html/form/AutoLabelEscapeMarkupTest.java | 2 +-
.../wicket/markup/html/form/TextAreaTest.java | 1 -
.../wicket/markup/html/form/TextFieldTest.java | 1 -
.../form/validation/HomePage1_ExpectedResult.html | 2 +-
.../apache/wicket/markup/html/HTML5Attributes.java | 33 +--------------------
.../markup/html/form/AbstractTextComponent.java | 34 ++++++++++++++++++++++
.../org/apache/wicket/markup/html/form/Button.java | 6 ++++
.../wicket/markup/html/form/FormComponent.java | 1 +
11 files changed, 53 insertions(+), 44 deletions(-)
diff --git a/pom.xml b/pom.xml
index 9cab7b6969..a12db16a7e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1592,3 +1592,4 @@
</plugins>
</reporting>
</project>
+
diff --git
a/wicket-core-tests/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html
b/wicket-core-tests/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html
index fcf45b76b2..e4db31ea62 100644
---
a/wicket-core-tests/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html
+++
b/wicket-core-tests/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html
@@ -21,9 +21,9 @@ Wicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_BOUND);
</script>
</head><body>
<form wicket:id="form" id="form1" method="post"
action="./page?0-1.-form"><div id="form1_hf_0" hidden=""
class="hidden-fields"></div>
- <input type="text" wicket:id="txt1" value="foo"
name="txt1"/>
- <input type="text" wicket:id="txt2" value="bar"
name="txt2"/>
- <input type="submit" value="Submit" wicket:id="submit"
name="p::submit" id="submit2"/>
+ <input type="text" wicket:id="txt1" value="foo"
name="txt1" required="required"/>
+ <input type="text" wicket:id="txt2" value="bar"
name="txt2" required="required"/>
+ <input type="submit" value="Submit" wicket:id="submit"
name="p::submit" formnovalidate="formnovalidate" id="submit2"/>
</form>
</body>
</html>
\ No newline at end of file
diff --git
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/AutoLabelEscapeAttributeTest.java
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/AutoLabelEscapeAttributeTest.java
index 8400280aff..81fb5b59d7 100644
---
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/AutoLabelEscapeAttributeTest.java
+++
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/AutoLabelEscapeAttributeTest.java
@@ -85,7 +85,7 @@ class AutoLabelEscapeAttributeTest extends WicketTestCase
String response = tester.getLastResponseAsString();
assertTrue(response.contains(FROM_MODEL),
"label from the model should be written as markup");
- assertFalse(response.contains("<em>model</em>"),
+ assertFalse(response.contains("><em>model</em><"),
"label from the model should not be escaped");
}
@@ -98,7 +98,7 @@ class AutoLabelEscapeAttributeTest extends WicketTestCase
String response = tester.getLastResponseAsString();
assertTrue(response.contains(FROM_DEFAULT_LABEL),
"default label should be written as markup");
- assertFalse(response.contains("<em>default</em>"),
+ assertFalse(response.contains("><em>default</em><"),
"default label should not be escaped");
}
@@ -111,7 +111,7 @@ class AutoLabelEscapeAttributeTest extends WicketTestCase
String response = tester.getLastResponseAsString();
assertTrue(response.contains(FROM_KEY),
"label from a message key should be written as markup");
- assertFalse(response.contains("<em>key</em>"),
+ assertFalse(response.contains("><em>key</em><"),
"label from a message key should not be escaped");
}
@@ -122,7 +122,7 @@ class AutoLabelEscapeAttributeTest extends WicketTestCase
tester.startPage(new LabelPage());
String response = tester.getLastResponseAsString();
- assertTrue(response.contains("<em>escapeTrue</em>"),
+
assertTrue(response.contains("><em>escapeTrue</em><"),
"escape=\"true\" should escape the label");
assertFalse(response.contains(ESCAPE_TRUE),
"escape=\"true\" should not let the label reach the
markup as markup");
@@ -141,7 +141,7 @@ class AutoLabelEscapeAttributeTest extends WicketTestCase
tester.startPage(new LabelPage());
String response = tester.getLastResponseAsString();
-
assertTrue(response.contains("<em>escapeBlank</em>"),
+
assertTrue(response.contains("><em>escapeBlank</em><"),
"escape=\"\" should escape the label");
assertFalse(response.contains(ESCAPE_BLANK),
"escape=\"\" should not let the label reach the markup
as markup");
diff --git
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/AutoLabelEscapeMarkupTest.java
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/AutoLabelEscapeMarkupTest.java
index bdad8bcff2..a5bf99a8d0 100644
---
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/AutoLabelEscapeMarkupTest.java
+++
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/AutoLabelEscapeMarkupTest.java
@@ -108,7 +108,7 @@ class AutoLabelEscapeMarkupTest extends WicketTestCase
String response = tester.getLastResponseAsString();
assertTrue(response.contains(BODY_MARKUP),
"the tag body should be rendered as markup");
- assertFalse(response.contains("<em>emphasis</em>"),
+
assertFalse(response.contains("><em>emphasis</em><"),
"the tag body should not be escaped");
}
diff --git
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java
index daf5b26b18..381fd8b743 100644
---
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java
+++
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java
@@ -45,7 +45,6 @@ class TextAreaTest extends WicketTestCase
testPage.textArea.setOutputMarkupId(true);
testPage.textArea.setType(String.class);
testPage.textArea.setRequired(true);
- testPage.textArea.add(new HTML5Attributes());
tester.startPage(testPage);
TagTester tagTester =
tester.getTagById(testPage.textArea.getMarkupId());
diff --git
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java
index de433edc1a..f27a0e1917 100644
---
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java
+++
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java
@@ -94,7 +94,6 @@ class TextFieldTest extends WicketTestCase
testPage.textField.setOutputMarkupId(true);
testPage.textField.setType(String.class);
testPage.textField.setRequired(true);
- testPage.textField.add(new HTML5Attributes());
tester.startPage(testPage);
TagTester tagTester =
tester.getTagById(testPage.textField.getMarkupId());
diff --git
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html
index a87014e30b..3720db5f5a 100644
---
a/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html
+++
b/wicket-core-tests/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html
@@ -11,7 +11,7 @@
<form wicket:id="form" id="form9" method="post"
action="./org.apache.wicket.markup.html.form.validation.HomePage1?1-1.-bug-form"><div
id="form9_hf_0" hidden="" class="hidden-fields"></div>
<div wicket:id="border"><wicket:border>
<wicket:body>
- <input wicket:id="name" value="" name="border:border_body:name"/>
+ <input wicket:id="name" value="" name="border:border_body:name"
required="required"/>
<div wicket:id="feedback"><wicket:panel>
</wicket:panel></div>
diff --git
a/wicket-core/src/main/java/org/apache/wicket/markup/html/HTML5Attributes.java
b/wicket-core/src/main/java/org/apache/wicket/markup/html/HTML5Attributes.java
index 5d72686154..377c96a75d 100644
---
a/wicket-core/src/main/java/org/apache/wicket/markup/html/HTML5Attributes.java
+++
b/wicket-core/src/main/java/org/apache/wicket/markup/html/HTML5Attributes.java
@@ -21,7 +21,6 @@ import
org.apache.wicket.application.IComponentInstantiationListener;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.form.AbstractTextComponent;
-import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
import org.apache.wicket.validation.IValidator;
@@ -32,7 +31,6 @@ import
org.apache.wicket.validation.validator.PatternValidator;
* Behavior which renders HTML5 attributes.
*
* @see #onInput(AbstractTextComponent, ComponentTag)
- * @see #onButton(Button, ComponentTag)
*/
public class HTML5Attributes extends Behavior
{
@@ -45,10 +43,6 @@ public class HTML5Attributes extends Behavior
{
onInput((AbstractTextComponent<?>)component, tag);
}
- else if (component instanceof Button)
- {
- onButton((Button)component, tag);
- }
}
/**
@@ -67,11 +61,6 @@ public class HTML5Attributes extends Behavior
*/
protected void onInput(AbstractTextComponent<?> input, ComponentTag tag)
{
- if (input.isRequired())
- {
- tag.put("required", "required");
- }
-
IModel<String> label = input.getLabel();
if (label != null && label.getObject() != null)
{
@@ -92,27 +81,7 @@ public class HTML5Attributes extends Behavior
}
}
- /**
- * Writes HTML5 attributes for {@link Button}s:
- *
- * <ul>
- * <li>{@code formnovalidate} if {@link
Button#getDefaultFormProcessing()} returns {@code false}
- * </li>
- * <ul>
- *
- * @param button
- * button component
- * @param tag
- * component tag
- */
- protected void onButton(Button button, ComponentTag tag)
- {
- if (!button.getDefaultFormProcessing())
- {
- tag.put("formnovalidate", "formnovalidate");
- }
- }
-
+
/**
* A listener to instantiations of {@link FormComponent}s to add HTML5
attributes.
*/
diff --git
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java
index 4d0ef5fb31..11b3b159b2 100644
---
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java
+++
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java
@@ -19,9 +19,13 @@ package org.apache.wicket.markup.html.form;
import java.text.SimpleDateFormat;
import org.apache.wicket.Component;
+import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.IObjectClassAwareModel;
import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.validation.IValidator;
+import org.apache.wicket.validation.ValidatorAdapter;
+import org.apache.wicket.validation.validator.PatternValidator;
/**
* Abstract base class for TextArea and TextField.
@@ -136,6 +140,36 @@ public abstract class AbstractTextComponent<T> extends
FormComponent<T>
resolveType();
}
+ @Override
+ protected void onComponentTag(ComponentTag tag)
+ {
+ if (isRequired())
+ {
+ tag.put("required", "required");
+ }
+
+ IModel<String> label = getLabel();
+ if (label != null && label.getObject() != null)
+ {
+ tag.put("placeholder", label.getObject());
+ }
+
+ for (IValidator<?> validator : getValidators())
+ {
+ while (validator instanceof ValidatorAdapter)
+ {
+ validator =
((ValidatorAdapter<?>)validator).getValidator();
+ }
+
+ if (validator instanceof PatternValidator)
+ {
+ tag.put("pattern",
((PatternValidator)validator).getPattern().toString());
+ }
+ }
+
+ super.onComponentTag(tag);
+ }
+
/**
*
*/
diff --git
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java
index 2a9ff9456d..fc115e2dc6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java
@@ -212,6 +212,11 @@ public class Button extends FormComponent<String>
implements IFormSubmittingComp
tag.put("value", value);
}
}
+
+ if (!getDefaultFormProcessing())
+ {
+ tag.put("formnovalidate", "formnovalidate");
+ }
}
/**
@@ -265,6 +270,7 @@ public class Button extends FormComponent<String>
implements IFormSubmittingComp
super.onComponentTagBody(markupStream, openTag);
}
+
@Override
public void onError()
diff --git
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
index 28331766df..995b6e180c 100644
---
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
+++
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
@@ -67,6 +67,7 @@ import org.apache.wicket.validation.IValidationError;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;
import org.apache.wicket.validation.ValidatorAdapter;
+import org.apache.wicket.validation.validator.PatternValidator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;