Archivio

Posts Tagged ‘eclipse’

Configurazione di JSF (MyFaces) con Eclipse e Tomcat

31 Ottobre 2012 Nessun commento

Java Server Faces (JSF) è un framework java basato sul design pattern architetturale Model-View-Controller. Esistono diverse implementazioni del framework: oltre a quella Sun, sono disponibili anche le implementazioni Oracle e quella Apache (MyFaces), che analizzeremo in questo breve esempio nella sua versione 1.2 (al momento siamo giunti alla versione 2.0).
Per procedere con la creazione del nostro progetto, che chiameremo JSF_MyFaces_Tutorial, creiamo in Eclipse un nuovo Dynamic Web Project settando le impostazioni come segue:

Nella sezione Configuration cliccare sul pulsante Modify… e spuntare le opzioni che si presentano come segue, prestando attenzione alla versione di JavaServer Faces che deve essere la 1.2 (nel nostro caso perché in seguito andremo ad aggiungere librerie compatibili con tale versione):

quindi procedere fino all’ultima schermata, quella per impostare le librerie, ricordandosi strada facendo di spuntare l’opzione Generate web.xml deployment descriptor.
Come detto utilizzeremo l’implementazione delle JSF fornita da Apache. Per ottenerla basta cliccare sull’icona a destra della schermata a forma di dischetto (Download library…), che permette di scaricare la libreria da internet.
A questo punto bisogna scaricare manualmente da internet la libreria JSTL (nel nostro caso abbiamo scaricato il file jstl-1.2.jar), quindi cliccando sull’icona sopra quella del dischetto (Manage libraries…) creare una nuova cartella tramite il comando New… da nominare JSTL e importare al suo interno il file appena scaricato cliccando sul pulsante Add External JARs…
Terminate le configurazioni delle librerie si dovrebbe avere una schermata simile a questa:

La fase di settaggio dell’applicazione è terminata.

HELLOWORLDBEAN.JAVA
Prendiamo confidenza con il framework appena configurato creando la nostra prima pagina JSF, l’immancabile Hello World! in versione MyFaces…
Dentro la cartella Java Resources/srccreiamo il package helloworldpackage e dentro creiamo una nuova classe java, HelloWorldBean.java, come segue:

package helloworldpackage;

public class HelloWorldBean {

    private String messaggio = "Ciao Mondo!";

    public HelloWorldBean() {}

    public void setMessaggio(String messaggio) {
        this.messaggio = messaggio;
    }
    public String getMessaggio() {
        return this.messaggio;
    }

}

FACES-CONFIG.XML
Questo file, presente nella cartella WebContent/WEB-INF, è fondamentale, contenendo le configurazioni per le jsf. Vediamo com’è strutturato:

<?xml version="1.0" encoding="UTF-8"?>

<faces-config 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-facesconfig_2_0.xsd"
    version="2.0">

    <managed-bean>
        <managed-bean-name>hello_world_bean</managed-bean-name>
        <managed-bean-class>helloworldpackage.HelloWorldBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

</faces-config>

All’interno del tag managed-bean si specificano le caratteristiche di un determinato bean (va utilizzato un tag per ogni bean presente): il primo tag è il nome che vogliamo dare al bean (per convenzione si usa il nome della classe del bean con l’iniziale maiuscola, ma in questo caso abbiamo fatto un’eccezione per rendere successivamente più comprensibile l’esempio); il secondo tag è la classe a cui il bean fa riferimento (va utilizzato l’intero percorso del package); infine il terzo tag descrive lo scope del bean (in questo esempio abbiamo usato il valore request, ma è possibile usare anche session e none).

WEB.XML
Questo è il file di configurazione del web server ed Eclipse si occupa di servircene una configurazione iniziale funzionante. Vediamo la prima parte (quella che ci interessa in questo momento)

<?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_3_0.xsd"   
    id="WebApp_ID"
    version="3.0">

    <display-name>JSF_MyFaces_Tutorial</display-name>

    <welcome-file-list>
        <welcome-file>faces/pages/index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    ...

</web-app>

INDEX.JSP
Passiamo alla realizzazione della pagina di visualizzazione del nostro esempio.
In WebContent creiamo la cartella pages e al suo interno il file index.jsp, con il codice proposto di seguito:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<f:view>
	<h:outputLabel value="#{hello_world_bean.messaggio}"></h:outputLabel>
</f:view>

</body>
</html>

Le due righe subito dopo la dichiarazione del doctype specificano la presenza di due prefissi i quali si riferiscono alle definizioni contenute negli indirizzi alla loro destra. I prefissi vengono usati al posto dei tag per riferirsi a dei componenti più complessi che sfruttano le possibilità del framework. All’interno del body il tag <f:view> è necessario per poter usare tutti gli altri tag JSF. Senza di esso infatti il framework lancerebbe un messaggio, lamentando l’assenza di un tag “root”. Molto importante è notare come ci si riferisce alle proprietà dei bean. HelloWorldBean è la classe creata in precedenza, mentre hello_world_bean è il bean registrato nel faces-config e riferito alla nostra classe java. Quest’ultimo, come si può vedere, è in grado di riferirsi direttamente all’attributo della nostra classe. Avendo infatti nominato correttamente i getter ed i setter, sarà il framework a richiamarli opportunamente per ritornare il valore della variabile. Senza getter e setter impostati questo meccanismo non può funzionare.
A questo punto non resta che visualizzare la nostra applicazione sul browser andando all’indirizzo:
http://127.0.0.1:8080/JSF_MyFaces_Tutorial/faces/pages/index.jsp
o semplicemente:
http://127.0.0.1:8080/JSF_MyFaces_Tutorial/

Categorie:jsf Tag: , ,