Jump to content

Apache Wicket

From Wikipedia, the free encyclopedia
Apache Wicket
Developer(s)Apache Software Foundation
Stable release
10.0.0[1]Edit this on Wikidata / 2024-03-11; 4 months ago
Repositorygithub/apache/wicket
Written inJava
TypeWeb application framework
LicenseApache License 2.0
Websitewicket.apache.org

Apache Wicket,commonly referred to asWicket,is a component-basedweb application frameworkfor theJava programming languageconceptually similar toJavaServer FacesandTapestry.It was originally written by Jonathan Locke in April 2004. Version 1.0 was released in June 2005. It graduated into anApachetop-level project in June 2007.[2]

Rationale

[edit]

Traditionalmodel-view-controller(MVC) frameworks work in terms of wholerequestsand whole pages. In each request cycle, the incoming request is mapped to a method on acontrollerobject, which then generates the outgoing response in its entirety, usually by pulling data out of amodelto populate aviewwritten in specializedtemplate markup.This keeps the application'sflow-of-controlsimple and clear, but can makecode reusein the controller difficult.

In contrast, Wicket is closely patterned afterstatefulGUIframeworks such asSwing.Wicket applications are trees ofcomponents,which use listenerdelegatesto react toHTTPrequests against links and forms in the same way that Swing components react to mouse and keystroke events. Wicket is categorized as a component-based framework.

Design

[edit]

Wicket uses plainXHTMLfor templating (which enforces a clear separation of presentation andbusiness logicand allows templates to be edited with conventionalWYSIWYGdesign tools[3]). Each component is bound to a named element in the XHTML and becomes responsible for rendering that element in the final output. Thepageis 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 apanel,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 asopaqueobjects automaticallyserializedandpersistedbetween requests. More complex models, however, may be madedetachableand providehooksto arrange their own storage and restoration at the beginning and end of each request cycle. Wicket does not mandate any particular object-persistence orORMlayer, so applications often use some combination ofHibernateobjects[citation needed],EJBsorPOJOsas models.

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

[edit]

AHello WorldWicket application, with four files:

HelloWorld.html
The XHTML template.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http:// w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<htmlxmlns="http:// w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
xml:lang="en"lang="en">

<body>
<spanwicket:id="message"id="message">Messagegoeshere</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" ).
packageorg.wikipedia.wicket;

importorg.apache.wicket.markup.html.WebPage;
importorg.apache.wicket.markup.html.basic.Label;

publicclassHelloWorldextendsWebPage{
/**
* Constructor
*/
publicHelloWorld(){
add(newLabel("message","Hello World!"));
}
}
HelloWorldApplication.java
The main application class, which routes requests for the homepage to the HelloWorld page component.
packageorg.wikipedia.wicket;

importorg.apache.wicket.protocol.http.WebApplication;

publicclassHelloWorldApplicationextendsWebApplication{
/**
* Constructor.
*/
publicHelloWorldApplication(){
}

/**
* @see org.apache.wicket.Application#getHomePage()
*/
publicClassgetHomePage(){
returnHelloWorld.class;
}
}
web.xml
TheservletapplicationDeployment 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-appxmlns:xsi="http:// w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun /xml/ns/javaee"
xmlns:web="http://java.sun /xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun /xml/ns/javaee
http://java.sun /xml/ns/javaee/web-app_2_5.xsd "
id="WebApp_ID"version="2.5">
<display-name>WicketExample</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

[edit]

Basic components like form, links, repeaters, and so on are built-in.

Releases

[edit]
Apache Wicket Versions
Series Description Latest release Latest release date
Current stable version: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
Current stable version: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
Older version, yet still maintained: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
Older version, yet still maintained: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
Old version, no longer maintained: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
Old version, no longer maintained:1.5.x Improvements of the Wicket features.[9] 1.5.16 2016-08-05
Old version, no longer maintained:1.4.x Moving to Java 5 as the required minimum platform.[10] 1.4.23 2014-02-06
Old version, no longer maintained:1.3.x 1.3.7 2009-07-30
Old version, no longer maintained:1.2.x 1.2.7 2008-03-23
Old version, no longer maintained:1.1.x 1.1.1 TBD
Old version, no longer maintained:1.0.x 1.0.3 TBD
Legend:
Old version
Older version, still maintained
Latest version
Latest preview version
Future release

See also

[edit]

References

[edit]
  • Ceregatti Longo, João Sávio (August 26, 2013).Instant Apache Wicket 6(1st ed.).Packt Publishing.p. 54.ISBN978-1783280018.
  • Mader, Jochen (March 28, 2012).Wicket: Komponentenbasiert und objektorientiert(1st ed.).Entwickler.p. 220.ISBN978-3868020816.Archived fromthe originalon 2010-12-23.Retrieved2009-01-23.
  • Vaynberg, Igor (May 15, 2011).Apache Wicket Cookbook(1st ed.).Packt Publishing.p. 312.ISBN978-1-84951-160-5.
  • Dashorst, Martijn; Hillenius, Eelco (September 15, 2008).Wicket in Action(1st ed.).Manning Publications.p. 392.ISBN978-1-932394-98-6.
  • Gurumurthy, Karthik (September 7, 2006).Pro Wicket(1st ed.).Apress.p. 328.ISBN1-59059-722-2.Archived fromthe originalon 2010-12-23.Retrieved2009-01-23.

Notes

[edit]
  1. ^https://wicket.apache.org/news/2024/03/.{{cite web}}:Missing or empty|title=(help)
  2. ^Dashorst, Martijn (2007-07-20)."Wicket graduates from Apache Incubation".Retrieved2008-03-07.
  3. ^Carleton, Daniel (2007-10-12)."Java Web Development the Wicket Way".DevX.Archivedfrom the original on 10 March 2008.Retrieved2008-03-07.
  4. ^Announcing Apache Wicket 10: build modern web applications with Java!.wicket.apache.org. Retrieved on 2024-03-11.
  5. ^Announcing Apache Wicket 9: get into the modern Java world!.wicket.apache.org. Retrieved on 2020-10-05.
  6. ^Announcing Apache Wicket 8: Write Less, Achieve More.wicket.apache.org. Retrieved on 2018-05-22.
  7. ^Apache Wicket v7.0 released.wicket.apache.org. Retrieved on 2018-04-16.
  8. ^Apache Wicket v6.0.0 released.wicket.apache.org. Retrieved on 2020-10-05.
  9. ^Apache Wicket - Apache Wicket releases Wicket 1.5.Wicket.apache.org. Retrieved on 2013-08-13.ArchivedOctober 6, 2014, at theWayback Machine
  10. ^Apache Wicket - Apache Wicket 1.4 takes typesafety to the next levelArchivedApril 25, 2012, at theWayback Machine.Wicket.apache.org. Retrieved on 2013-08-13.
[edit]

Official websiteEdit this at Wikidata