Apache Wicket
Apache Software Foundation | |
Stable release | 10.0.0[1]
/ 2024-03-11; 2 months ago |
---|---|
Apache License 2.0 | |
Website | wicket |
Apache Wicket, commonly referred to as Wicket, is a component-based
Rationale
Traditional
In contrast, Wicket is closely patterned after
Design
Wicket uses plain XHTML for templating (which enforces a clear separation of presentation and business logic and allows templates to be edited with conventional WYSIWYG design tools[3]). Each component is bound to a named element in the XHTML and becomes responsible for rendering that element in the final output. The page is simply the top-level containing component and is paired with exactly one XHTML template. Using a special tag, a group of individual components may be abstracted into a single component called a panel, which can then be reused whole in that page, other pages, or even other panels.
Each component is backed by its own model, which represents the state of the component. The framework does not have knowledge of how components interact with their models, which are treated as
In Wicket, all server side state is automatically managed. You should never directly use an HttpSession object or similar wrapper to store state. Instead, state is associated with components. Each server-side page component holds a nested hierarchy of stateful components, where each component's model is, in the end, a POJO (Plain Old Java Object)
Wicket aims for simplicity. There are no configuration files to learn in Wicket. Wicket is a simple class library with a consistent approach to component structure.
Example
A Hello World Wicket application, with four files:
- HelloWorld.html
- The XHTML template.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
xml:lang="en" lang="en">
<body>
<span wicket:id="message" id="message">Message goes here</span>
</body>
</html>
- HelloWorld.java
- The page component that will be bound to the template. It, in turn, binds a child component (the Label component named "message").
package org.wikipedia.wicket;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
public class HelloWorld extends WebPage {
/**
* Constructor
*/
public HelloWorld() {
add(new Label("message", "Hello World!"));
}
}
- HelloWorldApplication.java
- The main application class, which routes requests for the homepage to the HelloWorld page component.
package org.wikipedia.wicket;
import org.apache.wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication {
/**
* Constructor.
*/
public HelloWorldApplication() {
}
/**
* @see org.apache.wicket.Application#getHomePage()
*/
public Class getHomePage() {
return HelloWorld.class;
}
}
- web.xml
- The Deployment Descriptor, which installs Wicket as the default handler for the servlet and arranges for HelloWorldApplication to be instantiated at startup.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Wicket Example</display-name>
<filter>
<filter-name>HelloWorldApplication</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>org.wikipedia.wicket.HelloWorldApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HelloWorldApplication</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Components
Basic components like form, links, repeaters, and so on are built-in.
Releases
Series | Description | Latest release | Latest release date |
---|---|---|---|
10.x | Migrated from Javax APIs to Jakarta APIs. Depedencies upgraded to support Spring Framework 6 and therefore moving to Java 17 as the required minimum platform, and compatible with Java 21. CGLib is replaced with ByteBuddy.[4] | 10.0.0 | 2024-03-11 |
9.x | Moving to Java 11 as the required minimum platform, migrated from JUnit 4 to 5, support for Java 12 and 13, rework page and data storage and other improvements.[5] | 9.16.0 | 2023-11-23 |
8.x | Moving to Java 8 as the required minimum platform. Support for Lambdas, required Servlet API version moving to 3.1, support for the new types for handling dates and other improvements.[6] Recommended to upgrade to 9.x version. | 8.14.0 | 2022-01-29 |
7.x | Moving to Java 7 as the required minimum platform, cross site request forgery prevention, support for inline images. The release consist of almost 300 features, improvements and fixes.[7] Only security fixes, recommended to upgrade to 9.x version. | 7.18.0 | 2021-04-02 |
6.x | Moving to Java 6 as the required minimum platform. Out-of-the box jQuery integration, complete control over AJAX requests, improved event registration in browsers, support for large datasets, dependency management for client side JavaScript libraries, experimental support for websockets.[8] | 6.30.0 | 2018-12-05 |
1.5.x | Improvements of the Wicket features.[9] | 1.5.16 | 2016-08-05 |
1.4.x | Moving to Java 5 as the required minimum platform.[10] | 1.4.23 | 2014-02-06 |
1.3.x | 1.3.7 | 2009-07-30 | |
1.2.x | 1.2.7 | 2008-03-23 | |
1.1.x | 1.1.1 | TBD | |
1.0.x | 1.0.3 | TBD | |
Old version Older version, still maintained Latest version Latest preview version |
See also
References
- Ceregatti Longo, João Sávio (August 26, 2013). Instant Apache Wicket 6 (1st ed.). ISBN 978-1783280018.
- Mader, Jochen (March 28, 2012). Wicket: Komponentenbasiert und objektorientiert (1st ed.). ISBN 978-3868020816. Archived from the originalon 2010-12-23. Retrieved 2009-01-23.
- Vaynberg, Igor (May 15, 2011). Apache Wicket Cookbook (1st ed.). ISBN 978-1-84951-160-5.
- Dashorst, Martijn; Hillenius, Eelco (September 15, 2008). Wicket in Action (1st ed.). ISBN 978-1-932394-98-6.
- Gurumurthy, Karthik (September 7, 2006). Pro Wicket (1st ed.). ISBN 1-59059-722-2. Archived from the originalon 2010-12-23. Retrieved 2009-01-23.
Notes
- ^ https://wicket.apache.org/news/2024/03/.
{{cite web}}
: Missing or empty|title=
(help) - ^ Dashorst, Martijn (2007-07-20). "Wicket graduates from Apache Incubation". Retrieved 2008-03-07.
- ^ Carleton, Daniel (2007-10-12). "Java Web Development the Wicket Way". DevX. Archived from the original on 10 March 2008. Retrieved 2008-03-07.
- ^ Announcing Apache Wicket 10: build modern web applications with Java!. wicket.apache.org. Retrieved on 2024-03-11.
- ^ Announcing Apache Wicket 9: get into the modern Java world!. wicket.apache.org. Retrieved on 2020-10-05.
- ^ Announcing Apache Wicket 8: Write Less, Achieve More. wicket.apache.org. Retrieved on 2018-05-22.
- ^ Apache Wicket v7.0 released. wicket.apache.org. Retrieved on 2018-04-16.
- ^ Apache Wicket v6.0.0 released. wicket.apache.org. Retrieved on 2020-10-05.
- ^ Apache Wicket - Apache Wicket releases Wicket 1.5. Wicket.apache.org. Retrieved on 2013-08-13. Archived October 6, 2014, at the Wayback Machine
- ^ Apache Wicket - Apache Wicket 1.4 takes typesafety to the next level Archived April 25, 2012, at the Wayback Machine. Wicket.apache.org. Retrieved on 2013-08-13.