wicketAan de slag met wicket


Opmerkingen

Wicket is een op componenten gebaseerd raamwerk en staat in schril contrast met sommige van de eerdere oplossingen voor de soms eentonige taak van webprogrammering. Net als andere frameworks bouwt Wicket op de servlet-API van Sun.

In tegenstelling tot frameworks zoals Struts of Spring MVC, wordt de ontwikkelaar die Wicket gebruikt, meestal verwijderd uit de aanvraag / reactie-aard die inherent is aan het web en Servlets. In plaats van controllers te bouwen die veel gebruikers en threads tegelijkertijd moeten bedienen, aanvragen in moeten nemen, antwoorden moeten retourneren en nooit een status moeten opslaan, denkt de Wicket-ontwikkelaar in termen van stateful componenten. In plaats van een controller of actieklasse te maken, maakt hij of zij een pagina, plaatst er componenten op en definieert hoe elke component reageert op gebruikersinvoer.

Wicket gebruikt gewone XHTML voor sjablonen. Elke component is gebonden aan een benoemd element in de XHTML en wordt verantwoordelijk voor het weergeven van dat element in de uiteindelijke uitvoer. De pagina is simpelweg het hoofdniveau bevattende component en is gekoppeld aan precies één XHTML-sjabloon.

Elke component wordt ondersteund door zijn eigen model, dat de status van de component weergeeft. Het framework heeft geen kennis van hoe componenten omgaan met hun modellen, die worden behandeld als ondoorzichtige objecten die automatisch worden geserialiseerd en blijven bestaan tussen aanvragen door. Complexere modellen kunnen echter afneembaar worden gemaakt en voorzien van haken om hun eigen opslag en restauratie aan het begin en einde van elke aanvraagcyclus te regelen.

In Wicket wordt de serverstatus automatisch beheerd. Gebruik nooit een HttpSession-object of een vergelijkbare verpakking om de status op te slaan. In plaats daarvan wordt status geassocieerd met componenten. Elke server-side pagina-component bevat een geneste hiërarchie van stateful componenten, waarbij het model van elke component uiteindelijk een POJO (Plain Old Java Object) is.

versies

Versie Publicatiedatum
8.0.0-M4 2017/02/07
7.6.0 2016/12/29
6.26.0 2016/12/29

Installatie of instellingen

Mijn eerste Wicket-configuratie, app met Hello World op het startscherm:

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>