Az Apache Wicket gyakran csak Wicket, egy pehelysúlyú komponens alapú java nyelvű webalkalmazás keretrendszer, hasonló JavaServer Faces-hez illetve a Tapestry-hez. Eredetileg Jonathan Locke kezdte írni 2004 áprilisában. Az 1.0-s verziót 2005 júniusában adták ki. 2007 júniusában vált az Apache felsőszintű projektjévé.
Működési elve A hagyományos modell-nézet-vezérlő (angol rövidítéssel MVC) keretrendszerek a teljes HTTP-kérésre és teljes oldalra alapozva működnek. Minden kérési ciklusban a bejövő kérések le vannak képezve egy metódusra a vezérlő objektumban, amely ezután generálja a kimenő választ az teljes egészében, általában adatokat szedve ki egy modellből, amivel aztán feltölt egy speciális webes sablonnyelvben írt nézetet. Ez teszi a alkalmazás vezérlési folyamatát tisztává és egyszerűvé, ugyanakkor a kód-újrafelhasználást a vezérlőben bonyolulttá.
Ezzel szemben a Wicket esetében az állapottal rendelkező GUI-keretrendszerek szolgáltak mintául, mint amilyen pl. a Swing. A Wicket alkalmazások komponensfák, melyek figyelőket (angolul listener) delegálnak hogy reagáljanak a HTTP-kérésekre (hivatkozásokra és formokra), ugyanolyan módon, mint a Swing-komponensek reagálnak az egér- és billentyűzeteseményekre. Ezért a Wicketet komponens alapú keretrendszerek közé lehet sorolni, ha kategorizálni szeretnénk.
Tervezési alapelvek A Wicket egyszerű XHTML szöveges fájlokat használ a sablonokhoz (angolul template), mely megköveteli a megjelenítés és az üzleti logika tiszta különválasztását és lehetővé teszi a sablonok szerkeszthetőségét hagyományos WYSIWYG szerkesztőeszközökkel. Mindegyik komponens egy nevesített elemhez van kötve az XHTML-ben, és felelős az adott elem rendeléséért a végső kimenetben. Az oldal egyszerűen egy felső szintű komponens és pontosan egy XHTML sablonnal van párosítva. Egy speciális címkét (angolul tag) használva, egyes komponens csoportok kiemelhetők egy ún panal komponensbe, amely teljes mértékben újrafelhasználható az adott oldalon, más oldalakon vagy teljesen más paneleken.
Minden komponenst a saját modellje támogat, amely reprezentálja a komponens állapotát. A keretrendszernek nincs tudomása arról, hogy a komponensek hogyan kommunikálnak a modelljükkel, amelyek feketedoboz-objektumként viselkednek, automatikusan szerializáltak és perzisztáltak a kérések között. Az összetettebb modellek leválaszthatók (angolul detachable) és hookokat nyújtanak ahhoz, hogy gondoskodjanak a saját tárolásukról és visszaállításukról minden kérési ciklus elején és a végén. A Wicket nem követel meg semmilyen objektumperzisztencia vagy ORM réteget, így az alkalmazások gyakran használják a Hibernate objektumok, EJB vagy POJOk egyfajta kombinációját modellként.
A Wicketben minden szerver oldali állapot automatikusan kezelve van. Soha nincs szükség a HttpSession objektum vagy hasonló csomagoló közvetlen használatához az állapot tárolásához. E helyett az állapot a komponensekhez tartozik. Minden szerver oldali oldal komponens tartalmaz állapottal rendelkező komponensek beágyazott hierarchiáját, ahol minden komponens modellje végül is egy POJO (Plain Old Java Object).
A Wicket leginkább az egyszerűségről szól. Nincsenek konfigurációs fájlok, melyeket meg kell tanulni a Wicketben. A Wicket egy egyszerű osztályhierarchia a komponens struktúrához következetes megközelítéssel.
Példa Egy Hello World Wicket alkalmazás, 4 fájllal: 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 Az oldal komponensek, melyek a sablonhoz köthetők. Ez valójában egy gyerek komponenshez kötött (a Label komponens neve "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 A fő alkalmazás osztály, amely a kéréseket irányítja a weboldalon a HelloWorld oldal komponenshez. 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 A Servlet alkalmazás Deployment descriptor-a, amely telepíti a Wicket-et, mint a servlet alapértelmezett handlere, és gondoskodik arról, hogy a HelloWorldApplication példányosodjon induláskor. <?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>
Komponensek Az alapvető komponensek mint a formok, linkek, ciklusok stb. beépítettek. Lásd Wicket komponensek Az összes komponens
Kiadások Kiadás Dátum Megjegyzések1.3.72009-07-30Apache Wicket - Apache Wicket 1.3.7 marks end of life for Wicket 1.3 . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.42009-07-30 "elrugaszkodás a múlttól, magunk mögött hagyjuk a Java 1.4-et és minimális JDK verzióként a Java 5-t lesz megkövetelt. A Java 5 felé való elmozdulás mint megkövetelt minimális platform esetén képesek voltunk a Java 5 idiómákat hasznosítani és a típus biztosságot emelni az API-jainkban."Apache Wicket - Apache Wicket 1.4 takes typesafety to the next level . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.4.12009-08-21Apache Wicket - Wicket 1.4.1 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.4.92010-05-24"... több, mint 15 hibajavítás és továbbfejlesztés."Apache Wicket - Wicket 1.4.9 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.4.102010-08-11"... több mint 30 hibajavítás és továbbfejlesztés."Apache Wicket - Wicket 1.4.10 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.4.162011-02-25"Elsődlegesen egy kisebb hibajavítás kiadás az 1.4.x (stabil) fejlesztési ágon."Apache Wicket - Wicket 1.4.16 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.4.172011-04-02"Elsődlegesen egy nem jelentős hibajavítási kiadás az 1.4.x (stabil) fejlesztési ágon."Apache Wicket - Wicket 1.4.17 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.4.182011-08-09"Elsődlegesen egy kisebb hibajavítási kiadás az 1.4.x (stabil) fejlesztési ágon."Apache Wicket - Wicket 1.4.18 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.4.192011-10-19"Elsődlegesen egy kisebb hibajavítási kiadás az 1.4.x (stabil) fejlesztési ágon."Apache Wicket - Wicket 1.4.19 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.5.02011-09-07"Apache Wicket 1.5 fejlesztés alatt állt az elmúlt két évben és számos továbbfejlesztést hozott az előző verziókhoz képest."Apache Wicket - Apache Wicket releases Wicket 1.5 . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.5.12011-09-29"... több, mint 40 hibajavítás és 15 továbbfejlesztés."Apache Wicket - Wicket 1.5.1 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.5.22011-10-24"... több, mint 25 hibajavítás és 5 továbbfejlesztés."Apache Wicket - Wicket 1.5.2 released . Wicket.apache.org. Hozzáférés ideje: 2013-08-13.1.5.32011-11-14"... több, mint 40 hibajavítás és továbbfejlesztés."1.62012-09-05 Beépített jQuery integráció, teljes kontroll az AJAX kérések felett, továbbfejlesztett esemény regisztráció a böngészőkben, nagy adathalmazok támogatása, függőség kezelés a kliens oldali JavaScript könyvtárakhoz, a websocketek kísérleti támogatása1.6.32013-01-02 jQuery 1.8.2; JavaScript hibák javítása az IE7-ben IE8-ban.1.6.42013-01-14jQuery 1.8.3, bootstrap 2.2.2, JSR 303 BeanValidation támogatás, hierarchikus visszajelzési panel.
Kapcsolódó szócikkek Vaadin Tapestry Click ZK Richfaces Echo
Források
Jegyzetek
További információk Cikkek a témában Wicket: A simplified framework for building and testing dynamic Web pages A First Look at the Wicket Framework The Server Side discussion on Wicket 1.0 Tim Boudreau's Blog Kickstart Wicket in NetBeans IDE 6.1 The Server Side discussion Javalobby interview with Martijn Dashorst (project chairman) Wicket introduction presentation by Martijn Dashorst Wicket at FOSDEM 2011
Blogok Eelco Hillenius Martijn Dashorst Jonathan Locke Al Maw Bruno Borges Wicket in Action Mystic Coders
Dokumentáció Reusable components and patterns for Wicket Site that has live demos and a repository of components Wiki with how-tos, a manual and more Plethora of examples of using Wicket in the real world A free and comprehensive user guide to Wicket
Fordítás
Kategória:Java enterprise platform Kategória:Webalkalmazás-keretrendszerek Wicket