This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/wicket-8.x by this push:
     new ddefa94  WICKET-6654 Upgrade JQuery to 3.4.0
ddefa94 is described below

commit ddefa94da3d7669babbf9c8ef480527a9e550bb0
Author: Martin Tzvetanov Grigorov <[email protected]>
AuthorDate: Fri Apr 12 10:38:20 2019 +0300

    WICKET-6654 Upgrade JQuery to 3.4.0
    
    (cherry picked from commit 103e9963ef205b0181619d247f7b8571eb2a1f92)
---
 testing/wicket-js-tests/Gruntfile.js               |  14 +-
 .../wicket/resource/JQueryResourceReference.java   |   2 +-
 .../wicket/resource/jquery/jquery-3.3.1.min.js     |   2 -
 .../jquery/{jquery-3.3.1.js => jquery-3.4.0.js}    | 586 ++++++++++++++-------
 .../wicket/resource/jquery/jquery-3.4.0.min.js     |   2 +
 .../table/filter/FilterFormTestPage_expected.html  |  30 +-
 6 files changed, 430 insertions(+), 206 deletions(-)

diff --git a/testing/wicket-js-tests/Gruntfile.js 
b/testing/wicket-js-tests/Gruntfile.js
index 6606422..d7c034f 100644
--- a/testing/wicket-js-tests/Gruntfile.js
+++ b/testing/wicket-js-tests/Gruntfile.js
@@ -105,12 +105,12 @@ module.exports = function(grunt) {
                         */
                        all: {
                                options: {
-                               urls: [
-                                       
'http://localhost:38887/test/js/all.html?1.12.4',
-                                       
'http://localhost:38887/test/js/all.html?2.2.4',
-                                               
'http://localhost:38887/test/js/all.html?3.3.1'
-                               ]
-                           }
+                                       urls: [
+                                               
'http://localhost:38887/test/js/all.html?1.12.4',
+                                               
'http://localhost:38887/test/js/all.html?2.2.4',
+                                               
'http://localhost:38887/test/js/all.html?3.4.0'
+                                       ]
+                               }
                        },
 
                        /**
@@ -121,7 +121,7 @@ module.exports = function(grunt) {
                                        urls: [
                                                
'http://localhost:38887/test/js/amd.html?1.12.4',
                                                
'http://localhost:38887/test/js/amd.html?2.2.4',
-                                               
'http://localhost:38887/test/js/amd.html?3.3.1'
+                                               
'http://localhost:38887/test/js/amd.html?3.4.0'
                                        ]
                                }
                        }
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/resource/JQueryResourceReference.java
 
b/wicket-core/src/main/java/org/apache/wicket/resource/JQueryResourceReference.java
index 233a6d4..c418440 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/resource/JQueryResourceReference.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/resource/JQueryResourceReference.java
@@ -45,7 +45,7 @@ public class JQueryResourceReference extends 
JavaScriptResourceReference
         * JQuery ver. 3.x - improves on ver. 2
         * <strong>Note</strong>: Might not work with old jQuery plugins!
         */
-       public static final String VERSION_3 = "jquery/jquery-3.3.1.js";
+       public static final String VERSION_3 = "jquery/jquery-3.4.0.js";
 
        public static final JQueryResourceReference INSTANCE_1 = new 
JQueryResourceReference(VERSION_1);
        public static final JQueryResourceReference INSTANCE_2 = new 
JQueryResourceReference(VERSION_2);
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.3.1.min.js
 
b/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.3.1.min.js
deleted file mode 100644
index 4d9b3a2..0000000
--- 
a/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.3.1.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | 
jquery.org/license */
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof 
module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw
 new Error("jQuery requires a window with a document");return 
t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use 
strict";var 
n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function
 e(t){return"function"==typeof  [...]
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.3.1.js 
b/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.4.0.js
similarity index 94%
rename from 
wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.3.1.js
rename to 
wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.4.0.js
index 9b5206b..be2e6af 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.3.1.js
+++ 
b/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.4.0.js
@@ -1,5 +1,5 @@
 /*!
- * jQuery JavaScript Library v3.3.1
+ * jQuery JavaScript Library v3.4.0
  * https://jquery.com/
  *
  * Includes Sizzle.js
@@ -9,7 +9,7 @@
  * Released under the MIT license
  * https://jquery.org/license
  *
- * Date: 2018-01-20T17:24Z
+ * Date: 2019-04-10T19:48Z
  */
 ( function( global, factory ) {
 
@@ -91,20 +91,33 @@ var isWindow = function isWindow( obj ) {
        var preservedScriptAttributes = {
                type: true,
                src: true,
+               nonce: true,
                noModule: true
        };
 
-       function DOMEval( code, doc, node ) {
+       function DOMEval( code, node, doc ) {
                doc = doc || document;
 
-               var i,
+               var i, val,
                        script = doc.createElement( "script" );
 
                script.text = code;
                if ( node ) {
                        for ( i in preservedScriptAttributes ) {
-                               if ( node[ i ] ) {
-                                       script[ i ] = node[ i ];
+
+                               // Support: Firefox 64+, Edge 18+
+                               // Some browsers don't support the "nonce" 
property on scripts.
+                               // On the other hand, just using `getAttribute` 
is not enough as
+                               // the `nonce` attribute is reset to an empty 
string whenever it
+                               // becomes browsing-context connected.
+                               // See 
https://github.com/whatwg/html/issues/2369
+                               // See 
https://html.spec.whatwg.org/#nonce-attributes
+                               // The `node.getAttribute` check was added for 
the sake of
+                               // `jQuery.globalEval` so that it can fake a 
nonce-containing node
+                               // via an object.
+                               val = node[ i ] || node.getAttribute && 
node.getAttribute( i );
+                               if ( val ) {
+                                       script.setAttribute( i, val );
                                }
                        }
                }
@@ -129,7 +142,7 @@ function toType( obj ) {
 
 
 var
-       version = "3.3.1",
+       version = "3.4.0",
 
        // Define a local copy of jQuery
        jQuery = function( selector, context ) {
@@ -258,25 +271,28 @@ jQuery.extend = jQuery.fn.extend = function() {
 
                        // Extend the base object
                        for ( name in options ) {
-                               src = target[ name ];
                                copy = options[ name ];
 
+                               // Prevent Object.prototype pollution
                                // Prevent never-ending loop
-                               if ( target === copy ) {
+                               if ( name === "__proto__" || target === copy ) {
                                        continue;
                                }
 
                                // Recurse if we're merging plain objects or 
arrays
                                if ( deep && copy && ( jQuery.isPlainObject( 
copy ) ||
                                        ( copyIsArray = Array.isArray( copy ) ) 
) ) {
+                                       src = target[ name ];
 
-                                       if ( copyIsArray ) {
-                                               copyIsArray = false;
-                                               clone = src && Array.isArray( 
src ) ? src : [];
-
+                                       // Ensure proper type for the source 
value
+                                       if ( copyIsArray && !Array.isArray( src 
) ) {
+                                               clone = [];
+                                       } else if ( !copyIsArray && 
!jQuery.isPlainObject( src ) ) {
+                                               clone = {};
                                        } else {
-                                               clone = src && 
jQuery.isPlainObject( src ) ? src : {};
+                                               clone = src;
                                        }
+                                       copyIsArray = false;
 
                                        // Never move original objects, clone 
them
                                        target[ name ] = jQuery.extend( deep, 
clone, copy );
@@ -329,9 +345,6 @@ jQuery.extend( {
        },
 
        isEmptyObject: function( obj ) {
-
-               /* eslint-disable no-unused-vars */
-               // See https://github.com/eslint/eslint/issues/6125
                var name;
 
                for ( name in obj ) {
@@ -341,8 +354,8 @@ jQuery.extend( {
        },
 
        // Evaluates a script in a global context
-       globalEval: function( code ) {
-               DOMEval( code );
+       globalEval: function( code, options ) {
+               DOMEval( code, { nonce: options && options.nonce } );
        },
 
        each: function( obj, callback ) {
@@ -498,14 +511,14 @@ function isArrayLike( obj ) {
 }
 var Sizzle =
 /*!
- * Sizzle CSS Selector Engine v2.3.3
+ * Sizzle CSS Selector Engine v2.3.4
  * https://sizzlejs.com/
  *
- * Copyright jQuery Foundation and other contributors
+ * Copyright JS Foundation and other contributors
  * Released under the MIT license
- * http://jquery.org/license
+ * https://js.foundation/
  *
- * Date: 2016-08-08
+ * Date: 2019-04-08
  */
 (function( window ) {
 
@@ -539,6 +552,7 @@ var i,
        classCache = createCache(),
        tokenCache = createCache(),
        compilerCache = createCache(),
+       nonnativeSelectorCache = createCache(),
        sortOrder = function( a, b ) {
                if ( a === b ) {
                        hasDuplicate = true;
@@ -600,8 +614,7 @@ var i,
 
        rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
        rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + 
")" + whitespace + "*" ),
-
-       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + 
whitespace + "*\\]", "g" ),
+       rdescend = new RegExp( whitespace + "|>" ),
 
        rpseudo = new RegExp( pseudos ),
        ridentifier = new RegExp( "^" + identifier + "$" ),
@@ -622,6 +635,7 @@ var i,
                        whitespace + "*((?:-\\d)?\\d*)" + whitespace + 
"*\\)|)(?=[^-]|$)", "i" )
        },
 
+       rhtml = /HTML$/i,
        rinputs = /^(?:input|select|textarea|button)$/i,
        rheader = /^h\d$/i,
 
@@ -676,9 +690,9 @@ var i,
                setDocument();
        },
 
-       disabledAncestor = addCombinator(
+       inDisabledFieldset = addCombinator(
                function( elem ) {
-                       return elem.disabled === true && ("form" in elem || 
"label" in elem);
+                       return elem.disabled === true && 
elem.nodeName.toLowerCase() === "fieldset";
                },
                { dir: "parentNode", next: "legend" }
        );
@@ -791,18 +805,22 @@ function Sizzle( selector, context, results, seed ) {
 
                        // Take advantage of querySelectorAll
                        if ( support.qsa &&
-                               !compilerCache[ selector + " " ] &&
-                               (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-
-                               if ( nodeType !== 1 ) {
-                                       newContext = context;
-                                       newSelector = selector;
+                               !nonnativeSelectorCache[ selector + " " ] &&
+                               (!rbuggyQSA || !rbuggyQSA.test( selector )) &&
 
-                               // qSA looks outside Element context, which is 
not what we want
-                               // Thanks to Andrew Dupont for this workaround 
technique
-                               // Support: IE <=8
+                               // Support: IE 8 only
                                // Exclude object elements
-                               } else if ( context.nodeName.toLowerCase() !== 
"object" ) {
+                               (nodeType !== 1 || 
context.nodeName.toLowerCase() !== "object") ) {
+
+                               newSelector = selector;
+                               newContext = context;
+
+                               // qSA considers elements outside a scoping 
root when evaluating child or
+                               // descendant combinators, which is not what we 
want.
+                               // In such cases, we work around the behavior 
by prefixing every selector in the
+                               // list with an ID selector referencing the 
scope context.
+                               // Thanks to Andrew Dupont for this technique.
+                               if ( nodeType === 1 && rdescend.test( selector 
) ) {
 
                                        // Capture the context ID, setting it 
first if necessary
                                        if ( (nid = context.getAttribute( "id" 
)) ) {
@@ -824,17 +842,16 @@ function Sizzle( selector, context, results, seed ) {
                                                context;
                                }
 
-                               if ( newSelector ) {
-                                       try {
-                                               push.apply( results,
-                                                       
newContext.querySelectorAll( newSelector )
-                                               );
-                                               return results;
-                                       } catch ( qsaError ) {
-                                       } finally {
-                                               if ( nid === expando ) {
-                                                       
context.removeAttribute( "id" );
-                                               }
+                               try {
+                                       push.apply( results,
+                                               newContext.querySelectorAll( 
newSelector )
+                                       );
+                                       return results;
+                               } catch ( qsaError ) {
+                                       nonnativeSelectorCache( selector, true 
);
+                               } finally {
+                                       if ( nid === expando ) {
+                                               context.removeAttribute( "id" );
                                        }
                                }
                        }
@@ -998,7 +1015,7 @@ function createDisabledPseudo( disabled ) {
                                        // Where there is no isDisabled, check 
manually
                                        /* jshint -W018 */
                                        elem.isDisabled !== !disabled &&
-                                               disabledAncestor( elem ) === 
disabled;
+                                               inDisabledFieldset( elem ) === 
disabled;
                        }
 
                        return elem.disabled === disabled;
@@ -1055,10 +1072,13 @@ support = Sizzle.support = {};
  * @returns {Boolean} True iff elem is a non-HTML XML node
  */
 isXML = Sizzle.isXML = function( elem ) {
-       // documentElement is verified for cases where it doesn't yet exist
-       // (such as loading iframes in IE - #4833)
-       var documentElement = elem && (elem.ownerDocument || 
elem).documentElement;
-       return documentElement ? documentElement.nodeName !== "HTML" : false;
+       var namespace = elem.namespaceURI,
+               docElem = (elem.ownerDocument || elem).documentElement;
+
+       // Support: IE <=8
+       // Assume HTML when documentElement doesn't yet exist, such as inside 
loading iframes
+       // https://bugs.jquery.com/ticket/4833
+       return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" 
);
 };
 
 /**
@@ -1480,11 +1500,8 @@ Sizzle.matchesSelector = function( elem, expr ) {
                setDocument( elem );
        }
 
-       // Make sure that attribute selectors are quoted
-       expr = expr.replace( rattributeQuotes, "='$1']" );
-
        if ( support.matchesSelector && documentIsHTML &&
-               !compilerCache[ expr + " " ] &&
+               !nonnativeSelectorCache[ expr + " " ] &&
                ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
                ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
 
@@ -1498,7 +1515,9 @@ Sizzle.matchesSelector = function( elem, expr ) {
                                        elem.document && elem.document.nodeType 
!== 11 ) {
                                return ret;
                        }
-               } catch (e) {}
+               } catch (e) {
+                       nonnativeSelectorCache( expr, true );
+               }
        }
 
        return Sizzle( expr, document, null, [ elem ] ).length > 0;
@@ -1957,7 +1976,7 @@ Expr = Sizzle.selectors = {
                "contains": markFunction(function( text ) {
                        text = text.replace( runescape, funescape );
                        return function( elem ) {
-                               return ( elem.textContent || elem.innerText || 
getText( elem ) ).indexOf( text ) > -1;
+                               return ( elem.textContent || getText( elem ) 
).indexOf( text ) > -1;
                        };
                }),
 
@@ -2096,7 +2115,11 @@ Expr = Sizzle.selectors = {
                }),
 
                "lt": createPositionalPseudo(function( matchIndexes, length, 
argument ) {
-                       var i = argument < 0 ? argument + length : argument;
+                       var i = argument < 0 ?
+                               argument + length :
+                               argument > length ?
+                                       length :
+                                       argument;
                        for ( ; --i >= 0; ) {
                                matchIndexes.push( i );
                        }
@@ -3146,18 +3169,18 @@ jQuery.each( {
                return siblings( elem.firstChild );
        },
        contents: function( elem ) {
-        if ( nodeName( elem, "iframe" ) ) {
-            return elem.contentDocument;
-        }
+               if ( typeof elem.contentDocument !== "undefined" ) {
+                       return elem.contentDocument;
+               }
 
-        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
-        // Treat the template element as a regular one in browsers that
-        // don't support it.
-        if ( nodeName( elem, "template" ) ) {
-            elem = elem.content || elem;
-        }
+               // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 
only
+               // Treat the template element as a regular one in browsers that
+               // don't support it.
+               if ( nodeName( elem, "template" ) ) {
+                       elem = elem.content || elem;
+               }
 
-        return jQuery.merge( [], elem.childNodes );
+               return jQuery.merge( [], elem.childNodes );
        }
 }, function( name, fn ) {
        jQuery.fn[ name ] = function( until, selector ) {
@@ -4466,6 +4489,22 @@ var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + 
")([a-z%]*)$", "i" );
 
 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
 
+var documentElement = document.documentElement;
+
+
+
+       var isAttached = function( elem ) {
+                       return jQuery.contains( elem.ownerDocument, elem );
+               },
+               composed = { composed: true };
+
+       // Check attachment across shadow DOM boundaries when possible (gh-3504)
+       if ( documentElement.attachShadow ) {
+               isAttached = function( elem ) {
+                       return jQuery.contains( elem.ownerDocument, elem ) ||
+                               elem.getRootNode( composed ) === 
elem.ownerDocument;
+               };
+       }
 var isHiddenWithinTree = function( elem, el ) {
 
                // isHiddenWithinTree might be called from jQuery#filter 
function;
@@ -4480,7 +4519,7 @@ var isHiddenWithinTree = function( elem, el ) {
                        // Support: Firefox <=43 - 45
                        // Disconnected elements can have computed display: 
none, so first confirm that elem is
                        // in the document.
-                       jQuery.contains( elem.ownerDocument, elem ) &&
+                       isAttached( elem ) &&
 
                        jQuery.css( elem, "display" ) === "none";
        };
@@ -4522,7 +4561,8 @@ function adjustCSS( elem, prop, valueParts, tween ) {
                unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ 
prop ] ? "" : "px" ),
 
                // Starting value computation is required for potential unit 
mismatches
-               initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && 
+initial ) &&
+               initialInUnit = elem.nodeType &&
+                       ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial 
) &&
                        rcssNum.exec( jQuery.css( elem, prop ) );
 
        if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
@@ -4669,7 +4709,7 @@ jQuery.fn.extend( {
 } );
 var rcheckableType = ( /^(?:checkbox|radio)$/i );
 
-var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
 
 var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
 
@@ -4741,7 +4781,7 @@ function setGlobalEval( elems, refElements ) {
 var rhtml = /<|&#?\w+;/;
 
 function buildFragment( elems, context, scripts, selection, ignored ) {
-       var elem, tmp, tag, wrap, contains, j,
+       var elem, tmp, tag, wrap, attached, j,
                fragment = context.createDocumentFragment(),
                nodes = [],
                i = 0,
@@ -4805,13 +4845,13 @@ function buildFragment( elems, context, scripts, 
selection, ignored ) {
                        continue;
                }
 
-               contains = jQuery.contains( elem.ownerDocument, elem );
+               attached = isAttached( elem );
 
                // Append to fragment
                tmp = getAll( fragment.appendChild( elem ), "script" );
 
                // Preserve script evaluation history
-               if ( contains ) {
+               if ( attached ) {
                        setGlobalEval( tmp );
                }
 
@@ -4854,8 +4894,6 @@ function buildFragment( elems, context, scripts, 
selection, ignored ) {
        div.innerHTML = "<textarea>x</textarea>";
        support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
 } )();
-var documentElement = document.documentElement;
-
 
 
 var
@@ -4871,8 +4909,19 @@ function returnFalse() {
        return false;
 }
 
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+       return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
 // Support: IE <=9 only
-// See #13393 for more info
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
 function safeActiveElement() {
        try {
                return document.activeElement;
@@ -5172,9 +5221,10 @@ jQuery.event = {
                        while ( ( handleObj = matched.handlers[ j++ ] ) &&
                                !event.isImmediatePropagationStopped() ) {
 
-                               // Triggered event must either 1) have no 
namespace, or 2) have namespace(s)
-                               // a subset or equal to those in the bound 
event (both can have no namespace).
-                               if ( !event.rnamespace || 
event.rnamespace.test( handleObj.namespace ) ) {
+                               // If the event is namespaced, then each 
handler is only invoked if it is
+                               // specially universal or its namespaces are a 
superset of the event's.
+                               if ( !event.rnamespace || handleObj.namespace 
=== false ||
+                                       event.rnamespace.test( 
handleObj.namespace ) ) {
 
                                        event.handleObj = handleObj;
                                        event.data = handleObj.data;
@@ -5298,39 +5348,53 @@ jQuery.event = {
                        // Prevent triggered image.load events from bubbling to 
window.load
                        noBubble: true
                },
-               focus: {
+               click: {
 
-                       // Fire native event if possible so blur/focus sequence 
is correct
-                       trigger: function() {
-                               if ( this !== safeActiveElement() && this.focus 
) {
-                                       this.focus();
-                                       return false;
-                               }
-                       },
-                       delegateType: "focusin"
-               },
-               blur: {
-                       trigger: function() {
-                               if ( this === safeActiveElement() && this.blur 
) {
-                                       this.blur();
-                                       return false;
+                       // Utilize native event to ensure correct state for 
checkable inputs
+                       setup: function( data ) {
+
+                               // For mutual compressibility with _default, 
replace `this` access with a local var.
+                               // `|| data` is dead code meant only to 
preserve the variable through minification.
+                               var el = this || data;
+
+                               // Claim the first handler
+                               if ( rcheckableType.test( el.type ) &&
+                                       el.click && nodeName( el, "input" ) &&
+                                       dataPriv.get( el, "click" ) === 
undefined ) {
+
+                                       // dataPriv.set( el, "click", ... )
+                                       leverageNative( el, "click", returnTrue 
);
                                }
+
+                               // Return false to allow normal processing in 
the caller
+                               return false;
                        },
-                       delegateType: "focusout"
-               },
-               click: {
+                       trigger: function( data ) {
 
-                       // For checkbox, fire native event so checked state 
will be right
-                       trigger: function() {
-                               if ( this.type === "checkbox" && this.click && 
nodeName( this, "input" ) ) {
-                                       this.click();
-                                       return false;
+                               // For mutual compressibility with _default, 
replace `this` access with a local var.
+                               // `|| data` is dead code meant only to 
preserve the variable through minification.
+                               var el = this || data;
+
+                               // Force setup before triggering a click
+                               if ( rcheckableType.test( el.type ) &&
+                                       el.click && nodeName( el, "input" ) &&
+                                       dataPriv.get( el, "click" ) === 
undefined ) {
+
+                                       leverageNative( el, "click" );
                                }
+
+                               // Return non-false to allow normal event-path 
propagation
+                               return true;
                        },
 
-                       // For cross-browser consistency, don't fire native 
.click() on links
+                       // For cross-browser consistency, suppress native 
.click() on links
+                       // Also prevent it if we're currently inside a 
leveraged native-event stack
                        _default: function( event ) {
-                               return nodeName( event.target, "a" );
+                               var target = event.target;
+                               return rcheckableType.test( target.type ) &&
+                                       target.click && nodeName( target, 
"input" ) &&
+                                       dataPriv.get( target, "click" ) ||
+                                       nodeName( target, "a" );
                        }
                },
 
@@ -5347,6 +5411,85 @@ jQuery.event = {
        }
 };
 
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+       // Missing expectSync indicates a trigger call, which must force setup 
through jQuery.event.add
+       if ( !expectSync ) {
+               jQuery.event.add( el, type, returnTrue );
+               return;
+       }
+
+       // Register the controller as a special universal handler for all event 
namespaces
+       dataPriv.set( el, type, false );
+       jQuery.event.add( el, type, {
+               namespace: false,
+               handler: function( event ) {
+                       var notAsync, result,
+                               saved = dataPriv.get( this, type );
+
+                       if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+                               // Interrupt processing of the outer synthetic 
.trigger()ed event
+                               if ( !saved ) {
+
+                                       // Store arguments for use when 
handling the inner native event
+                                       saved = slice.call( arguments );
+                                       dataPriv.set( this, type, saved );
+
+                                       // Trigger the native event and capture 
its result
+                                       // Support: IE <=9 - 11+
+                                       // focus() and blur() are asynchronous
+                                       notAsync = expectSync( this, type );
+                                       this[ type ]();
+                                       result = dataPriv.get( this, type );
+                                       if ( saved !== result || notAsync ) {
+                                               dataPriv.set( this, type, false 
);
+                                       } else {
+                                               result = undefined;
+                                       }
+                                       if ( saved !== result ) {
+
+                                               // Cancel the outer synthetic 
event
+                                               
event.stopImmediatePropagation();
+                                               event.preventDefault();
+                                               return result;
+                                       }
+
+                               // If this is an inner synthetic event for an 
event with a bubbling surrogate
+                               // (focus or blur), assume that the surrogate 
already propagated from triggering the
+                               // native event and prevent that from happening 
again here.
+                               // This technically gets the ordering wrong 
w.r.t. to `.trigger()` (in which the
+                               // bubbling surrogate propagates *after* the 
non-bubbling base), but that seems
+                               // less bad than duplication.
+                               } else if ( ( jQuery.event.special[ type ] || 
{} ).delegateType ) {
+                                       event.stopPropagation();
+                               }
+
+                       // If this is a native event triggered above, 
everything is now in order
+                       // Fire an inner synthetic event with the original 
arguments
+                       } else if ( saved ) {
+
+                               // ...and capture the result
+                               dataPriv.set( this, type, jQuery.event.trigger(
+
+                                       // Support: IE <=9 - 11+
+                                       // Extend with the prototype to reset 
the above stopImmediatePropagation()
+                                       jQuery.extend( saved.shift(), 
jQuery.Event.prototype ),
+                                       saved,
+                                       this
+                               ) );
+
+                               // Abort handling of the native event
+                               event.stopImmediatePropagation();
+                       }
+               }
+       } );
+}
+
 jQuery.removeEvent = function( elem, type, handle ) {
 
        // This "if" is needed for plain objects
@@ -5459,6 +5602,7 @@ jQuery.each( {
        shiftKey: true,
        view: true,
        "char": true,
+       code: true,
        charCode: true,
        key: true,
        keyCode: true,
@@ -5505,6 +5649,33 @@ jQuery.each( {
        }
 }, jQuery.event.addProp );
 
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, 
delegateType ) {
+       jQuery.event.special[ type ] = {
+
+               // Utilize native event if possible so blur/focus sequence is 
correct
+               setup: function() {
+
+                       // Claim the first handler
+                       // dataPriv.set( this, "focus", ... )
+                       // dataPriv.set( this, "blur", ... )
+                       leverageNative( this, type, expectSync );
+
+                       // Return false to allow normal processing in the caller
+                       return false;
+               },
+               trigger: function() {
+
+                       // Force setup before trigger
+                       leverageNative( this, type );
+
+                       // Return non-false to allow normal event-path 
propagation
+                       return true;
+               },
+
+               delegateType: delegateType
+       };
+} );
+
 // Create mouseenter/leave events using mouseover/out and event-time checks
 // so that event delegation works in jQuery.
 // Do the same for pointerenter/pointerleave and pointerover/pointerout
@@ -5755,11 +5926,13 @@ function domManip( collection, args, callback, ignored 
) {
                                                if ( node.src && ( node.type || 
"" ).toLowerCase()  !== "module" ) {
 
                                                        // Optional AJAX 
dependency, but won't run scripts if not present
-                                                       if ( jQuery._evalUrl ) {
-                                                               
jQuery._evalUrl( node.src );
+                                                       if ( jQuery._evalUrl && 
!node.noModule ) {
+                                                               
jQuery._evalUrl( node.src, {
+                                                                       nonce: 
node.nonce || node.getAttribute( "nonce" )
+                                                               } );
                                                        }
                                                } else {
-                                                       DOMEval( 
node.textContent.replace( rcleanScript, "" ), doc, node );
+                                                       DOMEval( 
node.textContent.replace( rcleanScript, "" ), node, doc );
                                                }
                                        }
                                }
@@ -5781,7 +5954,7 @@ function remove( elem, selector, keepData ) {
                }
 
                if ( node.parentNode ) {
-                       if ( keepData && jQuery.contains( node.ownerDocument, 
node ) ) {
+                       if ( keepData && isAttached( node ) ) {
                                setGlobalEval( getAll( node, "script" ) );
                        }
                        node.parentNode.removeChild( node );
@@ -5799,7 +5972,7 @@ jQuery.extend( {
        clone: function( elem, dataAndEvents, deepDataAndEvents ) {
                var i, l, srcElements, destElements,
                        clone = elem.cloneNode( true ),
-                       inPage = jQuery.contains( elem.ownerDocument, elem );
+                       inPage = isAttached( elem );
 
                // Fix IE cloning issues
                if ( !support.noCloneChecked && ( elem.nodeType === 1 || 
elem.nodeType === 11 ) &&
@@ -6095,8 +6268,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
 
                // Support: IE 9 only
                // Detect overflow:scroll screwiness (gh-3699)
+               // Support: Chrome <=64
+               // Don't get tricked when zoom affects offsetWidth (gh-4029)
                div.style.position = "absolute";
-               scrollboxSizeVal = div.offsetWidth === 36 || "absolute";
+               scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) 
=== 12;
 
                documentElement.removeChild( container );
 
@@ -6167,7 +6342,7 @@ function curCSS( elem, name, computed ) {
        if ( computed ) {
                ret = computed.getPropertyValue( name ) || computed[ name ];
 
-               if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) 
) {
+               if ( ret === "" && !isAttached( elem ) ) {
                        ret = jQuery.style( elem, name );
                }
 
@@ -6223,30 +6398,13 @@ function addGetHookIf( conditionFn, hookFn ) {
 }
 
 
-var
+var cssPrefixes = [ "Webkit", "Moz", "ms" ],
+       emptyStyle = document.createElement( "div" ).style,
+       vendorProps = {};
 
-       // Swappable if display is none or starts with table
-       // except "table", "table-cell", or "table-caption"
-       // See here for display values: 
https://developer.mozilla.org/en-US/docs/CSS/display
-       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
-       rcustomProp = /^--/,
-       cssShow = { position: "absolute", visibility: "hidden", display: 
"block" },
-       cssNormalTransform = {
-               letterSpacing: "0",
-               fontWeight: "400"
-       },
-
-       cssPrefixes = [ "Webkit", "Moz", "ms" ],
-       emptyStyle = document.createElement( "div" ).style;
-
-// Return a css property mapped to a potentially vendor prefixed property
+// Return a vendor-prefixed property or undefined
 function vendorPropName( name ) {
 
-       // Shortcut for names that are not vendor prefixed
-       if ( name in emptyStyle ) {
-               return name;
-       }
-
        // Check for vendor prefixed names
        var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
                i = cssPrefixes.length;
@@ -6259,16 +6417,33 @@ function vendorPropName( name ) {
        }
 }
 
-// Return a property mapped along what jQuery.cssProps suggests or to
-// a vendor prefixed property.
+// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
 function finalPropName( name ) {
-       var ret = jQuery.cssProps[ name ];
-       if ( !ret ) {
-               ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
+       var final = jQuery.cssProps[ name ] || vendorProps[ name ];
+
+       if ( final ) {
+               return final;
        }
-       return ret;
+       if ( name in emptyStyle ) {
+               return name;
+       }
+       return vendorProps[ name ] = vendorPropName( name ) || name;
 }
 
+
+var
+
+       // Swappable if display is none or starts with table
+       // except "table", "table-cell", or "table-caption"
+       // See here for display values: 
https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+       rcustomProp = /^--/,
+       cssShow = { position: "absolute", visibility: "hidden", display: 
"block" },
+       cssNormalTransform = {
+               letterSpacing: "0",
+               fontWeight: "400"
+       };
+
 function setPositiveNumber( elem, value, subtract ) {
 
        // Any relative (+/-) values have already been
@@ -6340,7 +6515,10 @@ function boxModelAdjustment( elem, dimension, box, 
isBorderBox, styles, computed
                        delta -
                        extra -
                        0.5
-               ) );
+
+               // If offsetWidth/offsetHeight is unknown, then we can't 
determine content-box scroll gutter
+               // Use an explicit zero to avoid NaN (gh-3964)
+               ) ) || 0;
        }
 
        return delta;
@@ -6350,9 +6528,16 @@ function getWidthOrHeight( elem, dimension, extra ) {
 
        // Start with computed style
        var styles = getStyles( elem ),
+
+               // To avoid forcing a reflow, only fetch boxSizing if we need 
it (gh-4322).
+               // Fake content-box until we know it's needed to know the true 
value.
+               boxSizingNeeded = !support.boxSizingReliable() || extra,
+               isBorderBox = boxSizingNeeded &&
+                       jQuery.css( elem, "boxSizing", false, styles ) === 
"border-box",
+               valueIsBorderBox = isBorderBox,
+
                val = curCSS( elem, dimension, styles ),
-               isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) 
=== "border-box",
-               valueIsBorderBox = isBorderBox;
+               offsetProp = "offset" + dimension[ 0 ].toUpperCase() + 
dimension.slice( 1 );
 
        // Support: Firefox <=54
        // Return a confounding non-pixel value or feign ignorance, as 
appropriate.
@@ -6363,22 +6548,29 @@ function getWidthOrHeight( elem, dimension, extra ) {
                val = "auto";
        }
 
-       // Check for style in case a browser which returns unreliable values
-       // for getComputedStyle silently falls back to the reliable elem.style
-       valueIsBorderBox = valueIsBorderBox &&
-               ( support.boxSizingReliable() || val === elem.style[ dimension 
] );
 
        // Fall back to offsetWidth/offsetHeight when value is "auto"
        // This happens for inline elements with no explicit setting (gh-3571)
        // Support: Android <=4.1 - 4.3 only
        // Also use offsetWidth/offsetHeight for misreported inline dimensions 
(gh-3602)
-       if ( val === "auto" ||
-               !parseFloat( val ) && jQuery.css( elem, "display", false, 
styles ) === "inline" ) {
+       // Support: IE 9-11 only
+       // Also use offsetWidth/offsetHeight for when box sizing is unreliable
+       // We use getClientRects() to check for hidden/disconnected.
+       // In those cases, the computed value can be trusted to be border-box
+       if ( ( !support.boxSizingReliable() && isBorderBox ||
+               val === "auto" ||
+               !parseFloat( val ) && jQuery.css( elem, "display", false, 
styles ) === "inline" ) &&
+               elem.getClientRects().length ) {
 
-               val = elem[ "offset" + dimension[ 0 ].toUpperCase() + 
dimension.slice( 1 ) ];
+               isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) 
=== "border-box";
 
-               // offsetWidth/offsetHeight provide border-box values
-               valueIsBorderBox = true;
+               // Where available, offsetWidth/offsetHeight approximate border 
box dimensions.
+               // Where not available (e.g., SVG), assume unreliable 
box-sizing and interpret the
+               // retrieved value as a content box dimension.
+               valueIsBorderBox = offsetProp in elem;
+               if ( valueIsBorderBox ) {
+                       val = elem[ offsetProp ];
+               }
        }
 
        // Normalize "" and auto
@@ -6424,6 +6616,13 @@ jQuery.extend( {
                "flexGrow": true,
                "flexShrink": true,
                "fontWeight": true,
+               "gridArea": true,
+               "gridColumn": true,
+               "gridColumnEnd": true,
+               "gridColumnStart": true,
+               "gridRow": true,
+               "gridRowEnd": true,
+               "gridRowStart": true,
                "lineHeight": true,
                "opacity": true,
                "order": true,
@@ -6479,7 +6678,9 @@ jQuery.extend( {
                        }
 
                        // If a number was passed in, add the unit (except for 
certain CSS properties)
-                       if ( type === "number" ) {
+                       // The isCustomProp check can be removed in jQuery 4.0 
when we only auto-append
+                       // "px" to a few hardcoded values.
+                       if ( type === "number" && !isCustomProp ) {
                                value += ret && ret[ 3 ] || ( jQuery.cssNumber[ 
origName ] ? "" : "px" );
                        }
 
@@ -6579,18 +6780,29 @@ jQuery.each( [ "height", "width" ], function( i, 
dimension ) {
                set: function( elem, value, extra ) {
                        var matches,
                                styles = getStyles( elem ),
-                               isBorderBox = jQuery.css( elem, "boxSizing", 
false, styles ) === "border-box",
-                               subtract = extra && boxModelAdjustment(
-                                       elem,
-                                       dimension,
-                                       extra,
-                                       isBorderBox,
-                                       styles
-                               );
+
+                               // Only read styles.position if the test has a 
chance to fail
+                               // to avoid forcing a reflow.
+                               scrollboxSizeBuggy = !support.scrollboxSize() &&
+                                       styles.position === "absolute",
+
+                               // To avoid forcing a reflow, only fetch 
boxSizing if we need it (gh-3991)
+                               boxSizingNeeded = scrollboxSizeBuggy || extra,
+                               isBorderBox = boxSizingNeeded &&
+                                       jQuery.css( elem, "boxSizing", false, 
styles ) === "border-box",
+                               subtract = extra ?
+                                       boxModelAdjustment(
+                                               elem,
+                                               dimension,
+                                               extra,
+                                               isBorderBox,
+                                               styles
+                                       ) :
+                                       0;
 
                        // Account for unreliable border-box dimensions by 
comparing offset* to computed and
                        // faking a content-box to get border and padding 
(gh-3699)
-                       if ( isBorderBox && support.scrollboxSize() === 
styles.position ) {
+                       if ( isBorderBox && scrollboxSizeBuggy ) {
                                subtract -= Math.ceil(
                                        elem[ "offset" + dimension[ 0 
].toUpperCase() + dimension.slice( 1 ) ] -
                                        parseFloat( styles[ dimension ] ) -
@@ -6758,9 +6970,9 @@ Tween.propHooks = {
                        // Use .style if available and use plain properties 
where available.
                        if ( jQuery.fx.step[ tween.prop ] ) {
                                jQuery.fx.step[ tween.prop ]( tween );
-                       } else if ( tween.elem.nodeType === 1 &&
-                               ( tween.elem.style[ jQuery.cssProps[ tween.prop 
] ] != null ||
-                                       jQuery.cssHooks[ tween.prop ] ) ) {
+                       } else if ( tween.elem.nodeType === 1 && (
+                                       jQuery.cssHooks[ tween.prop ] ||
+                                       tween.elem.style[ finalPropName( 
tween.prop ) ] != null ) ) {
                                jQuery.style( tween.elem, tween.prop, tween.now 
+ tween.unit );
                        } else {
                                tween.elem[ tween.prop ] = tween.now;
@@ -8467,6 +8679,10 @@ jQuery.param = function( a, traditional ) {
                                encodeURIComponent( value == null ? "" : value 
);
                };
 
+       if ( a == null ) {
+               return "";
+       }
+
        // If an array was passed in, assume that it is an array of form 
elements.
        if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) 
{
 
@@ -8969,12 +9185,14 @@ jQuery.extend( {
                                                if ( !responseHeaders ) {
                                                        responseHeaders = {};
                                                        while ( ( match = 
rheaders.exec( responseHeadersString ) ) ) {
-                                                               
responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+                                                               
responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
+                                                                       ( 
responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
+                                                                               
.concat( match[ 2 ] );
                                                        }
                                                }
-                                               match = responseHeaders[ 
key.toLowerCase() ];
+                                               match = responseHeaders[ 
key.toLowerCase() + " " ];
                                        }
-                                       return match == null ? null : match;
+                                       return match == null ? null : 
match.join( ", " );
                                },
 
                                // Raw string
@@ -9363,7 +9581,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) {
 } );
 
 
-jQuery._evalUrl = function( url ) {
+jQuery._evalUrl = function( url, options ) {
        return jQuery.ajax( {
                url: url,
 
@@ -9373,7 +9591,16 @@ jQuery._evalUrl = function( url ) {
                cache: true,
                async: false,
                global: false,
-               "throws": true
+
+               // Only evaluate the response if it is successful (gh-4126)
+               // dataFilter is not invoked for failure responses, so using it 
instead
+               // of the default converter is kludgy but it works.
+               converters: {
+                       "text script": function() {}
+               },
+               dataFilter: function( response ) {
+                       jQuery.globalEval( response, options );
+               }
        } );
 };
 
@@ -9656,24 +9883,21 @@ jQuery.ajaxPrefilter( "script", function( s ) {
 // Bind script tag hack transport
 jQuery.ajaxTransport( "script", function( s ) {
 
-       // This transport only deals with cross domain requests
-       if ( s.crossDomain ) {
+       // This transport only deals with cross domain or forced-by-attrs 
requests
+       if ( s.crossDomain || s.scriptAttrs ) {
                var script, callback;
                return {
                        send: function( _, complete ) {
-                               script = jQuery( "<script>" ).prop( {
-                                       charset: s.scriptCharset,
-                                       src: s.url
-                               } ).on(
-                                       "load error",
-                                       callback = function( evt ) {
+                               script = jQuery( "<script>" )
+                                       .attr( s.scriptAttrs || {} )
+                                       .prop( { charset: s.scriptCharset, src: 
s.url } )
+                                       .on( "load error", callback = function( 
evt ) {
                                                script.remove();
                                                callback = null;
                                                if ( evt ) {
                                                        complete( evt.type === 
"error" ? 404 : 200, evt.type );
                                                }
-                                       }
-                               );
+                                       } );
 
                                // Use native DOM manipulation to avoid our 
domManip AJAX trickery
                                document.head.appendChild( script[ 0 ] );
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.4.0.min.js
 
b/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.4.0.min.js
new file mode 100644
index 0000000..769a1d9
--- /dev/null
+++ 
b/wicket-core/src/main/java/org/apache/wicket/resource/jquery/jquery-3.4.0.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.4.0 | (c) JS Foundation and other contributors | 
jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof 
module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw
 new Error("jQuery requires a window with a document");return 
t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use 
strict";var 
t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof
 e& [...]
diff --git 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterFormTestPage_expected.html
 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterFormTestPage_expected.html
index 114850d..ccb1420 100644
--- 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterFormTestPage_expected.html
+++ 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterFormTestPage_expected.html
@@ -1,15 +1,15 @@
-<html xmlns:wicket>
-<head><script type="text/javascript" 
src="../resource/org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm/wicket-filterform.js"></script>
-<script type="text/javascript" 
src="../resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-2.2.4.js"></script>
-<script type="text/javascript" 
src="../resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery.js"></script>
-<script type="text/javascript" >
-/*<![CDATA[*/
-Wicket.Event.add(window, "load", function(event) { 
-Wicket.FilterForm.restore('form1focus');;
-;});
-/*]]>*/
-</script>
-</head><body>
-  <form wicket:id="form" id="form1" method="post" 
action="./org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterFormTestPage?0-1.-form"><div
 style='position: absolute; left: -9999px; width: 1px; height: 1px;' 
class='hidden-fields'><input type='hidden' name='form1focus' id='form1focus' 
value=''/><input type='submit'/></div></form>
-</body>
-</html>
+<html xmlns:wicket>
+<head><script type="text/javascript" 
src="../resource/org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm/wicket-filterform.js"></script>
+<script type="text/javascript" 
src="../resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-2.2.4.js"></script>
+<script type="text/javascript" 
src="../resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery.js"></script>
+<script type="text/javascript" >
+/*<![CDATA[*/
+Wicket.Event.add(window, "load", function(event) { 
+Wicket.FilterForm.restore('form1focus');;
+;});
+/*]]>*/
+</script>
+</head><body>
+  <form wicket:id="form" id="form1" method="post" 
action="./org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterFormTestPage?0-1.-form"><div
 style='position: absolute; left: -9999px; width: 1px; height: 1px;' 
class='hidden-fields'><input type='hidden' name='form1focus' id='form1focus' 
value=''/><input type='submit'/></div></form>
+</body>
+</html>

Reply via email to