Wicket jest frameworkiem opartym na komponentach, co wyraźnie kontrastuje z niektórymi wcześniejszymi rozwiązaniami niekiedy monotonnego zadania programowania sieciowego. Podobnie jak inne frameworki, Wicket opiera się na API serwletu Sun.
Jednak w przeciwieństwie do frameworków takich jak Struts czy Spring MVC, programista korzystający z Wicket jest w większości usuwany z natury zapytań / odpowiedzi, która jest nieodłączna od sieci i serwletów. Zamiast budować kontrolery, które muszą obsługiwać wielu użytkowników i wątki jednocześnie, przyjmując żądania, zwracając odpowiedzi i nigdy nie zapisując żadnego stanu, twórca Wicket myśli w kategoriach składników stanowych. Zamiast tworzyć kontroler lub klasę akcji, tworzy stronę, umieszcza na niej komponenty i określa, jak każdy komponent reaguje na dane wejściowe użytkownika.
Wicket korzysta ze zwykłego XHTML do tworzenia szablonów. Każdy komponent jest powiązany z nazwanym elementem w XHTML i staje się odpowiedzialny za renderowanie tego elementu w końcowym wyniku. Strona jest po prostu komponentem najwyższego poziomu i jest sparowana z dokładnie jednym szablonem XHTML.
Każdy komponent jest wspierany przez swój własny model, który reprezentuje jego stan. Struktura nie ma wiedzy na temat interakcji komponentów z ich modelami, które są traktowane jako nieprzezroczyste obiekty automatycznie serializowane i utrwalane między żądaniami. Bardziej złożone modele mogą jednak zostać odłączone i zapewnić haczyki do organizowania własnego przechowywania i przywracania na początku i na końcu każdego cyklu żądania.
W Wicket wszystkim stanem po stronie serwera zarządza się automatycznie. Nigdy nie należy bezpośrednio używać obiektu HttpSession lub podobnego opakowania do przechowywania stanu. Zamiast tego stan jest powiązany z komponentami. Każdy komponent strony po stronie serwera zawiera zagnieżdżoną hierarchię komponentów stanowych, przy czym model każdego komponentu jest w końcu POJO (Plain Old Java Object).
Wersja | Data wydania |
---|---|
8.0.0-M4 | 2017-02-07 |
7.6.0 | 29.12.2016 |
6.26.0 | 29.12.2016 |
Moja pierwsza konfiguracja Wicket, aplikacja wyświetlająca Hello World na ekranie głównym:
import org.apache.wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication {
public HelloWorldApplication() {
}
@Override
public Class getHomePage() {
return HelloWorld.class;
}
}
HelloWorld.java
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
public class HelloWorld extends WebPage {
public HelloWorld() {
add(new Label("message", "Hello World!"));
}
}
HelloWorld.html
<html>
<body>
<span wicket:id="message">Message goes here</span>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My first Wicket App</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.apache.wicket.examples.helloworld.HelloWorldApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HelloWorldApplication</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
pom.xml
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
<version>${wicket.version}</version>
</dependency>