<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta charset="utf-8">
	
	

        <title> Apache Wicket</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />

        <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon" />
        <link rel="stylesheet" href="/css/style.css" type="text/css" media="screen" />
        <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />

		<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
        <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.5.5/slick.css"/>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.5.5/slick-theme.css"/>

<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.slick/1.5.5/slick.min.js"></script>


    </head>
    <body class="index">
        <div class="header default">
    <div class="l-container">
        
<nav class="mainmenu">
    <div class="nav-logo">
    <a href="/"><img src="/img/logo-apachewicket.svg" alt="Apache Wicket"></a>
</div>

    <div class="nav-container">
    
		
    	
        
        
		<!-- /start/quickstart.html || / -->
		
    	
        
    	<a href="/start/quickstart.html" class=" nav-items">Quick Start</a>
    
		
    	
        
        
		<!-- /start/download.html || / -->
		
    	
        
    	<a href="/start/download.html" class=" nav-items">Download</a>
    
		
    	
        
        
		<!-- /learn || / -->
		
    	
        
    	<a href="/learn" class=" nav-items">Documentation</a>
    
		
    	
        
        
		<!-- /help || / -->
		
    	
        
    	<a href="/help" class=" nav-items">Support</a>
    
		
    	
        
        
		<!-- /contribute || / -->
		
    	
        
    	<a href="/contribute" class=" nav-items">Contribute</a>
    
		
    	
        
        
		<!-- /community || / -->
		
    	
        
    	<a href="/community" class=" nav-items">Community</a>
    
		
    	
        
        
		<!-- /apache || / -->
		
    	
        
    	<a href="/apache" class=" nav-items">Apache</a>
    
    </div>
    <div class="nav-container  ">
        <a href="https://github.com/apache/wicket" target="_blank"><i class="fa fa-github nav-items"></i></a>
        <a href="https://twitter.com/apache_wicket" target="_blank"><i class="fa fa-twitter nav-items"></i></a>
        <a href="https://builtwithwicket.tumblr.com" target="_blank"><i class="fa fa-tumblr nav-items"></i></a>
    </div>    
</nav>
        
    </div>
</div>
<main>
    <div class="l-container">
        <header class="l-full preamble">
            <h1></h1>
            
            
            
        </header>
        <section class="toc left post index">
            <div id="toc" class="toc"><div id="toc-title"><h2>Table of Contents</h2></div><ul><li class="toc--level-1 toc--section-1"><a href="#"><span class="toc-number">1</span> <span class="toc-text">Getting Started with Wicket 9</span></a></li></ul></div>
        </section>
        <section>
            <div class="l-full">
    <p class="meta"></p>
    <div class="l-full l-first preamble">
    <a class="acevent"></a>
    <br />
    <h1 id="introduction" class="announce">Announcing Apache Wicket 9: get into the modern Java world!</h1>
    <div>
      <img src="/img/wicket-9-sun.png" alt="Apache Wicket" class="responsive-logo" />
    </div>
    <p>
      The Apache Wicket project announces the 9th major release of the open source Java web framework servicing websites and applications across the globe since 2004.     
      Built on top of Java 11, this version of Wicket brings web development into the modern Java world, offering a fundamental tool to keep you code up to date with Java's evolution.
    </p>
</div>
<div class="l-first">
  <div class="l-full">
    <h3>Bring the web into the modern Java era</h3>
    <p>
     The release of Java 9 has been a turning point in Java history which laid the foundation for the modern Java era. However, the magnitude of this change has discouraged many developers from leaving the safe harbor represented by Java 8. With Wicket 9 we finally have a fundamental tool to move on and bring our web applications into the new Java world.  
    </p>
    <p>
      With this version Wicket has been completely revisited and improved to embrace new technologies such as Java modularization and new libraries like JUnit 5.
    </p>
  </div>
</div>

<div class="l-first l-flex">
  <div class="l-half">
    <h3>Stay up to date with the Java release cycle</h3>
    <p>
      With Java releasing at a faster pace it's important to keep a library up to date with the latest changes introduced in the platform and ensure it works with the latest Java release. Wicket does all of this by taking part in the <a href="https://wiki.openjdk.java.net/display/quality/Quality+Outreach" target="_blank">OpenJDK Quality Outreach</a>, an initiative aimed to test popular Open Source projects with both the latest OpenJDK release and the Early Access release.
    </p>
  </div>
  <div class="l-half">
    <h3>Be ready for the next Java Enterprise</h3>
    <p>
     Shortly after Java 9 was released, Oracle submitted Java EE to the Eclipse Foundation. As side effect of this owner change, the package name 'javax' had to be migrated to 'jakarta'. Wicket historically promoted decoupling of Java EE APIs and application code, making the transition to future Java Enterprise versions much easier. 
    </p>
  </div>
</div>

<div class="l-first l-flex">
  <div class="l-full">
    <h3>Protect your web apps with Content Security Policy (CSP)</h3>
    <p>
     As the number of security threats grows, it's crucial for web applications to adopt the latest security standards and countermeasures. CSP is a modern standard that allows applications to declare approved origins of content (such as JavaScript, CSS, images, etc...) for the browser to load. Constructing a safe and at the same time complete CSP can be challenging. 
     You either risk leaving holes in the defense of your application or you break certain functionality. Protecting against unwanted inline scripts is the most important target to attain. In CSP this is called 'unsafe-inline' and it's the most common cause of cross-site scripting vulnerabilities.
    </p>
    <p>
     Wicket 9 comes with full support for CSP and does not need any unsafe directives. Wicket will automatically add a nonce to every header contribution and whitelist this nonce. This allows for flexible loading of resources without the need for a complex CSP. Of course it is possible to modify and customize the CSP, add additional directives or disable it entirely. Lookup our <a href="http://wicket.apache.org/learn/#guide" target="_blank">documentation</a> for more information.     
    </p>
  </div>
</div>

<div class="l-first l-flex">
  <div class="l-half">
    <h3>A Smooth Transition to Java 11+</h3>
    <p>
      If you come from Wicket 8 chances are you don't need to change your application code to enjoy all the improvements offered by Java 11, such as better Docker support, improved performance, new Z Garbage Collector, etc...
    </p>
    <p>
      That said, as this is a new major version we have, in accordance with semantic versioning, cleaned up many APIs and you might have compile errors when you migrate from previous Wicket versions.
    </p>
  </div>
  <div class="l-half">
    <h3>Migrating to Wicket 9</h3>
    <p>
      When you migrate from a previous Wicket version to Wicket 9, a full list of changes and migrations is available at the following page:
    </p>
    <p>
      <a href="https://s.apache.org/wicket9migrate">https://s.apache.org/wicket9migrate</a>
    </p>
    <p>
      Please consult this migration guide when you are moving towards Wicket 9.
    </p>
  </div>
</div>
<div class="l-first l-flex">
  <div class="l-full">
    <h2>Getting Started with Wicket 9</h2>
    <p>
      It is very easy to get started with Wicket: use our <a href="/start/quickstart.html">quick-start wizard</a> or 
      use one of the options below.
    </p>
  </div>
  <div class="l-half">
    <h3>Download using Apache Maven</h3>
    <p>
      With Apache Maven update your dependency to (and don't forget to
      update any other dependencies on Wicket projects to the same version):
    </p>

<figure class="highlight"><pre><code class="language-xml" data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
    <span class="nt">&lt;groupId&gt;</span>org.apache.wicket<span class="nt">&lt;/groupId&gt;</span>
    <span class="nt">&lt;artifactId&gt;</span>wicket-core<span class="nt">&lt;/artifactId&gt;</span>
    <span class="nt">&lt;version&gt;</span>9.9.1<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre></figure>

  </div>
  <div class="l-half">
    <h3>Download sources/binaries manually</h3>
    <p>
      You can download and build the distribution yourself, or use our
      convenient binary package:
    </p>
    <ul>
      <li>Source: <a href="http://www.apache.org/dyn/closer.cgi/wicket/9.9.1">9.9.1 source download</a></li>
      <li>Binary: <a href="http://www.apache.org/dyn/closer.cgi/wicket/9.9.1/binaries">9.9.1 binary download</a></li>
    </ul>
  </div>
</div>

<hr />

<div class="l-full l-first preamble">
    <h1 id="introduction">Introducing Apache&nbsp;Wicket</h1>
    <p>Invented in 2004, Wicket is one of the few survivors of the Java
    serverside web framework wars of the mid 2000's. Wicket is an open
    source, component oriented, serverside, Java web application framework.
    With a history of over a decade, it is still going strong and has a
    solid future ahead. Learn why you should consider Wicket for your next
    web application.</p>
</div>

<div class="l-first l-flex">
    <div class="l-one-third">
        <img src="/img/java-wicket-html5.png" class="l-full" />
        <h3>Just Java &amp; HTML</h3>
        <p>Leverage what you know about Java or your favourite HTML 
        editor to write Wicket applications. With pure Java code and HTML 
        markup Wicket is the go-to web framework for purists.</p>
    </div>
    <div class="l-one-third">
        <img src="/img/wicket-safe.png" class="l-full" />
        <h3>Secure by Default</h3>
        <p>URLs do not expose sensitive information and all component paths are
        session-relative. Wicket keeps your model private except those parts
        you explicitly expose.</p>
    </div>
    <div class="l-one-third">
        <img src="/img/wicket-components.png" class="l-full" />
        <h3>AJAX Components</h3>
        <p>Write Ajax applications without having to write a single line 
        of JavaScript code. Wicket's Ajax functionality makes it trivial 
        to update selected parts of a UI, and comes with a great selection 
        of basic Ajax components.</p>
    </div>
</div>
<div class="l-first l-flex">
    <div class="l-one-third">
        <h3>Open Source with Apache License</h3>
        <p>Since its inception in 2004 Wicket has been an open source
        project and remains available under one of the most permissive
        licenses: the Apache Software License.</p>
    </div>
    <div class="l-one-third">
        <h3>Maintainable code</h3>
        <p>Pages and Components in Wicket are real Java objects that support
        encapsulation, inheritance and events. Create high level components
        with ease and bundle its stylesheets, JavaScript and other resources
        into one reusable package.</p>
    </div>
    <div class="l-one-third">
        <h3>Internationalized to take on the world</h3>
        <p>With support of over 25 languages out-of-the-box, Wicket let's 
        you get started in your own language, or a second language with no 
        effort. You can provide alternative languages on the application, 
        page, or even component level.</p>
    </div>
</div>
<div class="l-first l-flex">
    <div class="l-one-third">
        <h3>Multi-tab and window support</h3>
        <p>No more pain while keeping tabs on multiple tabs and windows. 
        Wicket's automatic state storage ensures that your users can open 
        pages in new tabs and windows without causing problems.</p>
    </div>
    <div class="l-two-third">
        <h3>Work with JavaScript and CSS</h3>
        <p>Global JavaScript libraries and CSS styling mix properly with 
        component local JavaScript and CSS resources. You can use custom 
        component libraries that ship with default JavaScript behaviour and 
        CSS styling, without having to do anything yourself. Creating such 
        self-contained component libraries is as easy as creating a JAR 
        file.</p>
    </div>
</div>
<div class="l-first l-flex">
    <div class="l-one-third">
        <h3>Test your pages and components</h3>
        <p>With WicketTester you can achieve testing coverage your QA 
        department can only dream of. Test your pages without having to run 
        inside a browser, or start a container. Test your components directly, 
        check their rendered markup tags, attributes and contents with ease.</p>
    </div>
    <div class="l-one-third">
        <h3>Injection support</h3>
        <p>Inject your services into your pages and components with the 
        technology of your choosing: Wicket provides integration with CDI 
        (JSR-305), Spring and Guice.</p>
    </div>
    <div class="l-one-third">
        <h3>JavaEE integration</h3>
        <p>If you are using the Web profile of JavaEE 6 or newer, you can 
        leverage JPA, EJBs, Bean Validation and CDI with Wicket's integrations 
        for these specifications.</p>
    </div>
</div>
<div class="l-first">
</div>
<hr />


</div>


            <article id="builtwithwicket" class="builtwithwicket">
                <header class="preamble">
    <h1 id="poweredby">Projects Using Apache Wicket</h1>
    <p>
        Many projects use Wicket but are not known for it. 
        Below you find a list of projects that are <a href="http://builtwithwicket.tumblr.com" rel="nofollow">Powered by Wicket</a>.
    </p>
</header>
<article class="l-full">
    <div class="builtwithwicket-slider"></div>
    <br><br>
    <p>
        This list is generated from our Tumblr feed 'Built with Wicket'. 
        You can submit your own project to this list through 
        <a href="http://builtwithwicket.tumblr.com/submit" rel="nofollow">this form</a>.
    </p>
</article>
<div class="l-first"></div>
<!-- Only display the blog image, title and post URL -->   
<script type="text/javascript"> 
    function randomIntFromInterval(min,max)
    {
        return Math.floor(Math.random()*(max-min+1)+min);
    }

    $.getJSON('./tumblr.json',
        function(response) {
            var posts = response.posts;  

            for(var postIndex in posts) {
                var post = posts[postIndex];
                var caption = jQuery('<div>' + post['photo-caption'] + '</div>').text().substring(0,150) + "...";
                var newSlide = $('.builtwithwicket-slider').append(
                    '<div class="builtwithwicket-post">\n' +
                    '  <img class="builtwithwicket-screenshot" data-lazy="' + post['photo-url-500'] + '">\n' +
                    '  <p class="builtwithwicket-caption">' + caption + '</p>\n' +
                    '  <a href="' + post['url'] + '" rel="nofollow">More</a>\n' + 
                    '</div>');
            }

            $('.builtwithwicket-slider').slick({
                arrows: true,
                autoplay: true,
                autoplaySpeed: 5000,
                dots: true,
                draggable: true,
                infinite: true,
                initialSlide: randomIntFromInterval(0, posts.length),
                lazyLoad: 'ondemand',
                pauseOnDotsHover: true,
                responsive: [    {
                        breakpoint: 590,
                        settings: {
                            slidesToShow: 1,
                            slidesToScroll: 1
                        }
                    },
                    {
                        breakpoint: 960,
                        settings: {
                            slidesToShow: 2,
                            slidesToScroll: 2
                        }
                    },
                ],
                slidesToShow: 3,
                slidesToScroll: 3,
                swipe: true,
            });
        });
</script>

            </article>

            <article id="news" class="">
                <div class="l-full l-first preamble">
    <h1 id="news">News about Apache Wicket</h1>
    <p>Get the latest updates to releases, security bulletins, community 
    news and more.</p>
</div>


<div class="l-flex"> 
	<div class="l-two-third" >
	
	    <article>
	        <h2>Apache Wicket 9.9.1 released</h2>
	        <small>08 Apr 2022</small>
	        <p>The Apache Wicket PMC is proud to announce Apache Wicket 9.9.1!</p>

<p>Apache Wicket is an open source Java component oriented web application
framework that powers thousands of web applications and web sites for
governments, stores, universities, cities, banks, email providers, and
more. You can find more about Apache Wicket at https://wicket.apache.org</p>

<p>This release marks another minor release of Wicket 9. We
use semantic versioning for the development of Wicket, and as such no
API breaks are present in this release compared to 9.0.0.</p>

<h2 id="new-and-noteworthy">New and noteworthy</h2>

<p>This hotfix reverts WICKET-6963 which causes MarkupException in some particular cases. 
(see https://lists.apache.org/thread/y0zthfw2on04sm9wpn60my3x53b8cb3n).
In addition, this release updates Spring Core dependency to version 5.3.18 which provides a fix 
for Spring4shell vulnerability (CVE-2022-22965).</p>

<p>NOTE: Wicket is NOT directly impacted by Spring4shell. Your application might be exposed to this 
vulnerability only if you use Spring web frameworks (i.e. Spring MVC and Spring WebFlux).</p>

<h2 id="using-this-release">Using this release</h2>

<p>With Apache Maven update your dependency to (and don’t forget to
update any other dependencies on Wicket projects to the same version):</p>

<figure class="highlight"><pre><code class="language-xml" data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
    <span class="nt">&lt;groupId&gt;</span>org.apache.wicket<span class="nt">&lt;/groupId&gt;</span>
    <span class="nt">&lt;artifactId&gt;</span>wicket-core<span class="nt">&lt;/artifactId&gt;</span>
    <span class="nt">&lt;version&gt;</span>9.9.1<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre></figure>

<p>Or download and build the distribution yourself, or use our
convenience binary package you can find here:</p>

<ul>
  <li>Download: http://wicket.apache.org/start/wicket-9.x.html#manually</li>
</ul>


	        <a href="/news/2022/04/08/wicket-9.9.1-released.html">Read more...</a> 
	    </article>
	
	    <article>
	        <h2>Apache Wicket 9.9.0 released</h2>
	        <small>30 Mar 2022</small>
	        <p>The Apache Wicket PMC is proud to announce Apache Wicket 9.9.0!</p>

<p>Apache Wicket is an open source Java component oriented web application
framework that powers thousands of web applications and web sites for
governments, stores, universities, cities, banks, email providers, and
more. You can find more about Apache Wicket at https://wicket.apache.org</p>

<p>This release marks another minor release of Wicket 9. We
use semantic versioning for the development of Wicket, and as such no
API breaks are present in this release compared to 9.0.0.</p>

<h2 id="using-this-release">Using this release</h2>

<p>With Apache Maven update your dependency to (and don’t forget to
update any other dependencies on Wicket projects to the same version):</p>

<figure class="highlight"><pre><code class="language-xml" data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
    <span class="nt">&lt;groupId&gt;</span>org.apache.wicket<span class="nt">&lt;/groupId&gt;</span>
    <span class="nt">&lt;artifactId&gt;</span>wicket-core<span class="nt">&lt;/artifactId&gt;</span>
    <span class="nt">&lt;version&gt;</span>9.9.0<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre></figure>

<p>Or download and build the distribution yourself, or use our
convenience binary package you can find here:</p>

<ul>
  <li>Download: http://wicket.apache.org/start/wicket-9.x.html#manually</li>
</ul>


	        <a href="/news/2022/03/30/wicket-9.9.0-released.html">Read more...</a> 
	    </article>
	
	</div>

    <div class="l-one-third news">
        
		<h2>Older news</h2>
		
		<p>See the <a href="/news">archives</a> for all news
		articles concerning release, security and community updates.</p>
		
		<p>Note that you can subscribe to our <a type="application/atom+xml"
		title="Atom 1.0 feed" href="/atom.xml">RSS feed</a> to
		get updates in your favorite RSS reader the moment they happen.</p>
		
		<ul>
		
		<li>
		    <h3>Apache Wicket 9.9.0 released</h3>
		    <small>30 Mar 2022</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 9.9.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2022/03/30/wicket-9.9.0-released.html">more</a>
		</li>
		
		<li>
		    <h3>Apache Wicket 9.8.0 released</h3>
		    <small>06 Feb 2022</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 9.8.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2022/02/06/wicket-9.8.0-released.html">more</a>
		</li>
		
		<li>
		    <h3>Apache Wicket 8.14.0 released</h3>
		    <small>02 Feb 2022</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 8.14.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2022/02/02/wicket-8.14.0-released.html">more</a>
		</li>
		
		<li>
		    <h3>Apache Wicket 9.7.0 released</h3>
		    <small>01 Dec 2021</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 9.7.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2021/12/01/wicket-9.7.0-released.html">more</a>
		</li>
		
		<li>
		    <h3>Apache Wicket 9.6.0 released</h3>
		    <small>02 Nov 2021</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 9.6.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2021/11/02/wicket-9.6.0-released.html">more</a>
		</li>
		
		</ul>
	</div>
</div>
<div class="l-first"></div>

            </article>

        </section>
    </div>
</main>

        <footer>
            <div class="l-container">
    <div class="left">
        <img src="/img/asf_logo_url.svg" style="height:90px; float:left; margin-right:10px;">
        <div style="margin-top:12px;">Copyright © 2022 — The Apache Software Foundation. Apache Wicket, Wicket, Apache, the Apache feather logo, and the Apache Wicket project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
    </div>
</div>

        </footer>
    </body>
</html>
