Creare Web App con JSF 2.0

Introduzione

Java Server Faces è un framework per la realizzazione di applicazioni web in java. Similmente ad altri framework proprietari come Struts o Spring MVC, JSF segue il pattern architetturale Model View Controller (MVC), con la differenza che JSF è uno standard ufficiale definito nelle specifiche Java Enterprise Edition.

Generazione del progetto

Per la nostra applicazione di esempio utilizziamo java 8, Eclipse Luna (con JBoss Tools 4.2.3) e WildFly 8 come Application Server, ma è possibile utilizzare anche un Servlet Engine come Tomcat. Procediamo quindi con la creazione del progetto base utilizzando Maven. Apriamo quindi la schell e posizioniamoci nella cartella dove vogliamo creare il progetto e digitiamo:

Sostituite i parametri DgroupId e DartifactId come meglio credete. Aprite quindi il file web.xml e cancellate il doctype seguente:
ed infine, per avere un progetto Dynamic Web Project 2.5, sostituite il tag web-app con:

Completiamo la procedura aggiornando anche la versione della facets a 2.5 accedendo alle proprietà del progetto. Se Eclipse ve lo impedisce potete disabilitare la facet Dynamic Web Module e quindi eseguire Maven->Update Project e Maven provvederà a abilitare la facet nella versione corretta.

Dipendenze

Aggiungiamo dell’applicazione le dipendenze per JSF 2.0 accedendo al pom.xml nella root del progetto. La dependency da aggiungere è funzione di dove sarà deployata l’applicazione.

Per un Java EE Application Server (GlassFish, JBoss AS, etc):

Per deploying to a servlet container (Tomcat, Jetty, etc):

Si noti che nel primo caso lo scope della dipendenza è provided perché gli application server conformi alla specifica J2EE dispongono già delle librerie che implementano la specifica JSF. Proseguiamo aggiungendo il plugin necessario per la compilazione:

Configurazione

Per poter utilizzate JSP é necessario configurare servlet che gestisce le richieste provenienti dalle interfacce web costruite utilizzando JSF. Per farlo apriamo il file web.xml ed inseriamo l’xml mostrato di seguito:

Il parametro javax.faces.PROJECT_STAGE impostato a Development indica a JSF di di fornire messaggi di errore più accurati anche lato client, al costo di una riduzione delle performance. Viceversa impostandolo a Production l’attenzione maggiore sarà data alle performance mentre i messaggi saranno meno accurati.

Welcome page

A questo punto inseriamo nel progetto la prima “semplice” pagina di benvenuto in JSF. Per farlo  creiamo il file index.xhtml nella cartella webapp ed inseriamo la welcome page nel web.xml:

Si noti che la specifica suggerisce l’utilizzo di pagine in formato XHTML  con estensione .xhtml, la servlet infatti è configurata in modo da processare pagine con tale estensione. Il contenuto del file sarà:

Managed Bean

In JSF i bean che possono essere acceduti dalle pagine JSF sono detti managed bean. Si tratta di normalissimi bean java che possono contenere proprietà con i relativi metodi get e set, ma anche logica di business. Un managed bean può essere configurato sia utilizzando un file XML (faces-config.xml obbligatorio in JSX 1.x) ma anche attraverso le annotation. Tornando al nostro esempio, creiamo il managed bean HelloBean.

Modifichiamo quindi la pagina index.xhtml, aggiungendo una form con un input text ed un pulsante di sottomissione:

L’input text è collegato alla proprietà name del bean HelloBean, mentre il pulsante ha nell’action la redirezione verso la pagina welcome.xhtml così definita:

Si noti che in JSF 1.x era necessario definire delle regole di navigazione nel file faces-config.xhtml per indicare quale pagina visualizzare a seguito di una action. Con JSF 2.0 è possibile indicare la pagina direttamente nella proprietà action di un pulsante.

Deploy

Nel mio caso ho deciso di utilizzare il plug-in di Eclipse per gestire il deploy su WildFly. Semplicemente definite un Runtime Server WildFly 8.x con Java 8 ed inseritelo nella vista Servers. Quindi selezionate Add and Remove facendo tasto destro sul nome del server. Avviate ed aprite il browser alla pagina http://localhost:8080/jsf-employees/. Se tutto va bene vedrete:

jsf hello world

Utilizzando il plug-in può accadere che vi compaia il messaggio “Forbidden“. In questo caso aprite le proprietà del progetto ed ispezionate la configurazione “Deployment Assembly“. In particolare verificate che la cartella /src/main/webapp sia mappata su /.

Deployment Assembly

Download codice sorgente

Il progetto completo è disponibile qui jsf-employees.