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("&lt;em&gt;model&lt;/em&gt;"),
+               assertFalse(response.contains(">&lt;em&gt;model&lt;/em&gt;<"),
                        "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("&lt;em&gt;default&lt;/em&gt;"),
+               assertFalse(response.contains(">&lt;em&gt;default&lt;/em&gt;<"),
                        "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("&lt;em&gt;key&lt;/em&gt;"),
+               assertFalse(response.contains(">&lt;em&gt;key&lt;/em&gt;<"),
                        "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("&lt;em&gt;escapeTrue&lt;/em&gt;"),
+               
assertTrue(response.contains(">&lt;em&gt;escapeTrue&lt;/em&gt;<"),
                        "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("&lt;em&gt;escapeBlank&lt;/em&gt;"),
+               
assertTrue(response.contains(">&lt;em&gt;escapeBlank&lt;/em&gt;<"),
                        "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("&lt;em&gt;emphasis&lt;/em&gt;"),
+               
assertFalse(response.contains(">&lt;em&gt;emphasis&lt;/em&gt;<"),
                        "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;
 

Reply via email to