Wicket (Framework)

Wicket (Framework)

Wicket ist ein komponentenbasiertes Web-Framework für die Programmiersprache Java. Es ist ein Open-Source-Projekt und ist heute unter der Apache Lizenz, Version 2.0 verfügbar.

Inhaltsverzeichnis

Funktionalität

Konzeptionell ist es am ehesten mit Tapestry vergleichbar, konkurriert aber in ersten Linie mit JavaServer Faces und Google Web Toolkit.

Eigenschaften von Wicket sind:

  • Trennung von Logik (Java) und Darstellung (HTML und CSS). Jede Komponente speichert ihre Daten in ein zugehöriges Datenmodell.
  • Automatische Zustandsverwaltung.
  • Wicket-Templates können (mit Einschränkungen) mittels gängiger WYSIWYG-HTML-Tools erstellt und gewartet werden.
  • Bis auf web.xml sind keine XML-Konfigurationsdateien nötig. Für die Arbeit mit Wicket sind ausschließlich Java- und (X)HTML-Kenntnisse erforderlich
  • Die Übernahme der Benutzerdaten erfolgt mit Java. Dabei wird durch Java zuerst geprüft, ob eine Eingabe erforderlich ist, anschließend werden die Daten in den entsprechenden Datentyp umgewandelt. Abschließend werden die Daten auf Zulässigkeit (Validierung) geprüft. Diese drei Schritte können komponentenweise oder gemeinsam für ein Webformular über ein Fehlerbehandlungssystem abgefangen werden. Werden alle Schritte fehlerfrei durchlaufen, so werden die Daten im Datenmodell abgelegt.
  • Die Darstellung kann über CSS gesteuert werden.
  • Auch AJAX ist ohne JavaScript-Kenntnisse möglich. Dafür gibt es einzelne Klassen, die Ajax-Funktionalität bereitstellen. Allen Komponenten kann auch nachträglich Ajax-Funktionalität über sogenannte Behaviors hinzugefügt werden. So gibt es unter anderem die Klasse AjaxEventBehavior, zum Reagieren auf ein bestimmtes JavaScript-Ereignis oder die Klasse AbstractSelfUpdatingTimerBehavior, zum automatischen Aktualisieren einzelner Komponenten in bestimmten Zeitintervallen.
  • es ist möglich, eigene wiederverwendbare Komponenten zu entwickeln und diese ggf. mit AJAX-Funktionalität anzureichern.
  • sogenannte Ressourcen ermöglichen es, dynamisch generierte Daten einzubinden (z. B. PDF-Daten) oder auf statische Daten (JavaScript-/CSS-Dateien) zuzugreifen.
  • mit sogenannten Panels kann man Teile einer Seite ändern oder austauschen, bzw. die Seite aus verschiedenen Komponenten aufbauen.
  • Integration von externen JavaScript-Bibliotheken.
  • Schrittweise Migration von HTML-Seiten nach Wicket ist möglich.

Geschichte

Die Architektur von Wicket wurde 2004 von Jonathan Locke und Miko Matsumura entworfen, und war bis zur Version 1.2 auf sourceforge.org verfügbar. Später wurde das Framework dann unter der Apache Lizenz als OpenSource-Projekt verfügbar. Eine Gruppe von Programmierern der niederländischen Firma Topicus, die von Eelco Hillenius, Martijn Dashorst und Johan Compagner geleitet wurden, bilden neben einigen anderen bis heute das Kernteam. Wicket ist als Open-Source-Projekt unter der Apache Lizenz, Version 2.0 verfügbar.

Beispiel

Ein einfaches Beispiel besteht aus vier Dateien:

  • eine Application-Klasse, die als erstes aufgerufen wird
  • eine Java-Datei, die die Seite darstellt
  • eine zur Java-Datei zugehörige HTML-Datei.
  • und die Datei web.xml des Tomcat-Servers für die Konfiguration, welche Klasse die Applications-Klasse ist.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <filter>
        <filter-name>WicketApplication</filter-name>
        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>com.myapp.wicket.Application</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>2</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>WicketApplication</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <session-config><session-timeout>
            30
    </session-timeout></session-config>
    <welcome-file-list>
        <welcome-file/>
    </welcome-file-list>
</web-app>

Applications-Klasse

import org.apache.wicket.protocol.http.WebApplication;
 
public class Application extends WebApplication {
    public Class getHomePage() {
        return OnePage.class;       
    }
}

Web-Page (HTML)

Für jede Komponente, die dynamisch verändert werden soll, muss ein Attribut wicket:id angelegt werden.

<html>   
    <head>
        <title>Echo Application</title>
    </head>
    <body>
        <h1>Echo example</h1>
        <form wicket:id="form">
            <input wicket:id="field" type="text" />
            <input wicket:id="button1" type="submit" value="Button" />
            <input wicket:id="button2" type="button" value="Button deaktivieren..." />
        </form>
        <p wicket:id="message">Fun Fun Fun</p>
    </body>    
</html>

Web-Page (Java)

Alle Komponenten, die eine wicket:id haben, müssen wieder in die Klasse, die von WebPage erbt, hinzugefügt werden.

import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.Model;
 
public class OnePage extends WebPage {
 
    public OnePage() {
        final Label label = new Label("message", new Model(""));
        label.setOutputMarkupId(true);
        Form form = new Form("form");
        final TextField field = new TextField("field", new Model(""));
        field.setOutputMarkupId(true);
        form.add(field);
        final Button but1 = new Button("button1") {
 
            @Override
            public void onSubmit() {
                String value = (String) field.getModelObject();
                label.setModelObject("Normal-Request: " + value);
                field.setModelObject("");
                // setResponsePage(AnotherPage.class);
            }
        };
        but1.setOutputMarkupId(true);
        form.add(but1);
        final Button but2 = new Button("button2", new Model("Button deaktivieren ..."));
        but2.add(new AjaxEventBehavior("onclick") {
 
            @Override
            protected void onEvent(AjaxRequestTarget target) {
                but1.setEnabled(!but1.isEnabled());
                if (but1.isEnabled()) {
                    but2.setModelObject("Button deaktivieren ...");
                } else {
                    but2.setModelObject("Button aktivieren ...");
                }
                target.addComponent(but2);
                target.addComponent(but1);
            }
        });
        form.add(but2);
        add(form);
        add(label);
    }
}

Vergleich mit anderen Frameworks

Literatur

  • Martijn Dashorst, Eelco Hillenius: Wicket in Action. Manning, Greenwich/Connecticut 2008, ISBN 978-1932394986

Weblinks

Blogs


Wikimedia Foundation.

Игры ⚽ Поможем написать курсовую

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Wicket framework — Apache Wicket Тип веб фреймворк Разработчик Apache Software Foundation Написана на Java Операционная система …   Википедия

  • Framework — Framework  термин, имеющий размытое значение. Обычно используется в программировании, обозначая «простую концептуальную структуру, используемую для решения сложной, проблемной задачи». Значение этого термина существенно зависит от контекста его… …   Википедия

  • Wicket — Wick et, n. [OE. wiket, OF. wiket, guichet, F. quichet; probably of Scand. origin; cf. Icel. v?k a small creek, inlet, bay, vik a corner.] [1913 Webster] 1. A small gate or door, especially one forming part of, or placed near, a larger door or… …   The Collaborative International Dictionary of English

  • Wicket door — Wicket Wick et, n. [OE. wiket, OF. wiket, guichet, F. quichet; probably of Scand. origin; cf. Icel. v?k a small creek, inlet, bay, vik a corner.] [1913 Webster] 1. A small gate or door, especially one forming part of, or placed near, a larger… …   The Collaborative International Dictionary of English

  • Wicket gate — Wicket Wick et, n. [OE. wiket, OF. wiket, guichet, F. quichet; probably of Scand. origin; cf. Icel. v?k a small creek, inlet, bay, vik a corner.] [1913 Webster] 1. A small gate or door, especially one forming part of, or placed near, a larger… …   The Collaborative International Dictionary of English

  • Wicket keeper — Wicket Wick et, n. [OE. wiket, OF. wiket, guichet, F. quichet; probably of Scand. origin; cf. Icel. v?k a small creek, inlet, bay, vik a corner.] [1913 Webster] 1. A small gate or door, especially one forming part of, or placed near, a larger… …   The Collaborative International Dictionary of English

  • Wicket (Begriffsklärung) — Wicket steht für: Wicket, ein Begriff in der Sportart Cricket Apache Wicket, ein Web Framework für die Programmiersprache Java Diese Seite ist eine Begriffsklärung zur Unterscheidung mehrerer mit demselben Wort bezeichneter Begriffe …   Deutsch Wikipedia

  • Wicket — puede referirse a: Apache Wicket, un framework Java para desarrollo de aplicaciones web. Wicket W. Warrick, un personaje ficticio de raza ewok en la saga cinematográfica la Guerra de las Galaxias. Esta página de desambiguación cataloga artículos… …   Wikipedia Español

  • Wicket — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии …   Википедия

  • Wicket (disambiguation) — A wicket is a term used in the sport of cricket with several related meanings.It also has some non cricket meanings:* Sticky Wicket , a M*A*S*H episode *Wicket (retail); in banking, the place where a customer performs a transaction with a bank… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”