Création d’une application Wicket avec Eclipse

Suite à ce billet par wichtounet où il montre comment créer et lancer une application Wicket via maven et Jetty, je vais montrer dans ce billet comment créer et configurer une application Wicket à partir de zéro dans eclipse europa.

[Suite:]

1. Récupération des jars nécessaires

a. Wicket

On commence par récupérer la distribution Wicket téléchargeable ici (il s’agit de la version 1.3.3, la dernière version stable de Wicket).
Une fois téléchargé, décompresser l’archive sur votre disque.

b. slf4j et Log4j

Wicket utilise Slf4J pour le logging, faut donc télécharger la chose ici, et décompresser l’archive.
Il vous faut aussi Log4j téléchargeable ici par exemple.

2. Génération d’un projet web dynamique sous eclipse

Un projet Wicket est en fin de compte un projet web dynamique au sens d’eclipse.
J’ai déjà posté un billet montrant comment créer un tel projet en utilisant le tooling WebTools d’eclipse europa, je vais donc me contenter de pointer vers ce billet.

Donc, à la fin de cette étape, vous devriez finir avec un projet qui ressemble à ceci:

Projet généré

3. Configuration du classpath

Dans eclipse, clic droit sur le projet, properties et Java Build Path, ce qui donne cette fenêtre:

Java Build Path

Cliquez sur “Add External jars” et localiser le dossier lib dans le répertoire où vous avez décompressé Wicket, et sélectionnez les jars:

  • Wicket-1.3.3.jar
  • Wicket-datetime1.3.3.jar
  • Wicket-extensions-1.3.3.jar

Ajoutez les jars de Wicket

Il faut aussi ajouter les jars de slf4j et de log4j, donc, “Add External jars” encore une fois et localisez les jars suivants:

  • log4j.jar
  • slf4j-api.jar
  • slf4j-log4j12.jar

Ajoutez les jars de slf4j et log4j

Et validez.
Reste encore un casse gueule classique d’eclipse, et qui est de rendre ces jars disponibles lors du runtime.
Pour ce faire, dans eclipse, clic droit sur le projet, properties et “J2EE Module Dependencies”, ce qui donne cette fenêtre:

J2EE Module Dependencies

Cochez tout, comme le montre la capture et validez.

4. Création de la page d’acceuil et de l’application Wicket

a. Page d’accueil

Dans le dossier src du projet, créez un package, puis clic droit sur ce package, New et New Class:

New Web Page

Choisissez un nom pour la page d’accueil, mais surtout sélectionnez org.apache.wicket.markup.html.WebPage comme classe parente et validez.

Juste pour tester, je vais ajouter un Label à cette page, dont voici le code complet:

package djo.wicket.introo; 
 
import org.apache.wicket.markup.html.WebPage; 
import org.apache.wicket.markup.html.basic.Label; 
 
public class IntrooPage extends WebPage { 
  public IntrooPage() { 
    add(new Label("hello", "HelloWorld")); 
  } 
}

Il faut ensuite créer la page HTML correspondant à la classe qu’on vient de créer.
Dans eclipse, clic droit, New, New HTML:

Créez une page HTML

=> La page doit obligatoirement avoir le même nom que la classe de la page.

Dans la fenêtre qui s’affiche, saisissez le nom de la page, mais surtout sélectionnez le package qu’on vient de créer comme conteneur de a page: eclipse sélectionne WebContent par défaut, même si on a fait le clic droit sur le package.

Créez la page HTML bis

Dans cette page, il faut créer la balise qui correspond au label qu’on a crée dans la classe java:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 TransitionalEN" "http:www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Insert title here</title> 
</head> 
<body> 
  <span wicket:id="hello">Bla bla bla</span> 
</body> 
</html>

b. L’Application Wicket

Il faut maintenant créer la classe de l’application Wicket.
clic droit sur le package, NEw, New Java Class ce qui donne:

New Application

Enfin, voici un lien pour récupérer le WAR de l’application montrée dans ce billet, qui plus est inclut les sources.

Saisissez le nom de l’application, mais surtout org.apache.wicket.protocol.http.WebApplication comme classe parente et validez.

eclipse génère automatiquement une implémentation par défaut de la méthode abstraite getHomePage.
Il faut donc modifer cete méthode pour retourner la page qu’on vient de créer:

package djo.wicket.introo; 
 
import org.apache.wicket.protocol.http.WebApplication; 
 
public class IntrooApp extends WebApplication { 
 
  @Override 
  public Class getHomePage() { 
    return IntrooPage.class; 
  } 
 
}

5. Configuration de web.xml

Voilà, c’est la dernière étape où il faut ajouter le filtre de Wicket au fichier web.xml ainsi que son mapping.

<?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-project</display-name> 
  <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>djo.wicket.introo.IntrooApp</param-value> 
    </init-param> 
  </filter> 
 
  <filter-mapping> 
    <filter-name>WicketApplication</filter-name> 
    <url-pattern>/*</url-pattern> 
  </filter-mapping> 
</web-app>

Notez juste qu’il faut spécifier le nom complet de son classe application comme value à l’init-param applicationClassName du filtre.

6. Lancer la chose

Rien de compliqué: clic droit sur le projet, Run As et Run On Server:

Exécuter l'application

Ce qui devrait donner ceci dans la console:

May 23, 2008 2:39:05 PM org.apache.catalina.core.AprLifecycleListener init 
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/jvm/java-6-openjdk/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client::/usr/lib/jvm/java-6-openjdk/jre/lib/i386::/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/java/packages/lib/i386:/lib:/usr/lib 
May 23, 2008 2:39:05 PM org.apache.coyote.http11.Http11Protocol init 
INFO: Initializing Coyote HTTP/1.1 on http-8080 
May 23, 2008 2:39:05 PM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 817 ms 
May 23, 2008 2:39:05 PM org.apache.catalina.core.StandardService start 
INFO: Starting service Catalina 
May 23, 2008 2:39:05 PM org.apache.catalina.core.StandardEngine start 
INFO: Starting Servlet Engine: Apache Tomcat/6.0.14 
log4j:WARN No appenders could be found for logger (org.apache.wicket.protocol.http.pagestore.FileChannelPool). 
log4j:WARN Please initialize the log4j system properly. 
**************** 
* WARNING: Wicket is running in DEVELOPMENT mode.              *                               ^^^^^^^^^^^                    * Do NOT deploy to your live server(s) without changing this.  * See Application#getConfigurationType() for more information. **************** 
May 23, 2008 2:39:06 PM org.apache.coyote.http11.Http11Protocol start 
INFO: Starting Coyote HTTP/1.1 on http-8080 
May 23, 2008 2:39:06 PM org.apache.jk.common.ChannelSocket init 
INFO: JK: ajp13 listening on /0.0.0.0:8009 
May 23, 2008 2:39:06 PM org.apache.jk.server.JkMain start 
INFO: Jk running ID=0 time=0/188  config=null 
May 23, 2008 2:39:06 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 1453 ms 
May 23, 2008 2:39:36 PM org.apache.catalina.core.StandardContext reload 
INFO: Reloading this Context has started 
log4j:WARN No appenders could be found for logger (org.apache.wicket.protocol.http.pagestore.FileChannelPool). 
log4j:WARN Please initialize the log4j system properly. 
**************** 
* WARNING: Wicket is running in DEVELOPMENT mode.              *                               ^^^^^^^^^^^                    * Do NOT deploy to your live server(s) without changing this.  * See Application#getConfigurationType() for more information. ****************

et ceci dans le navigateur:

Résultat

7. Télécharger

Le WAR de l’application montrée dans ce billet peut être récupéré ici. A noter que les sources sont incluses dans le WAR.

—-

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: