dijous, 15 de juliol del 2010

Facelets i JSF 2.0 - Creació d'un formulari - Part VI - Llenguatge EL

El llenguatge d'expressió unificat EL (Expression Language) permet als creadors de pàgines web utilitzar una senzilla sintaxi per accedir a les dades de forma dinàmica a través d'objectes JavaBeans És aquest llenguatge el que emprarem per vincular els camps html del nostre formulari amb les propietats o atributs del bean que vàrem crear en l'anterior post. JavaServer Faces utilitza el llenguatge EL per:
  • Evaluar de manera diferida o immediata les expressions EL.
  • Establir i/o obtenir dades.
  • Invocar métodes.
Resumint, EL proporciona una manera senzilla de llegir dades d'aplicacions emmagatzemades en objectes de tipus JavaBean. També permet l'escriptura, per exemple, de dades introduïdes per l'usuari a través d'un formulari , en un objecte JavaBean. Permet també l'execució de métodes invocats per esdeveniments. Per utilitzar el llenguatge EL hem d'escriure la sintaxi entre els símbols #{ d'inici i el símbol } de tancament. Veiem-ne un exemple:
En el següent codi (de l'arxiu inici.xhtml), el text introduït per  l'usuari en un camp de text serà emmagatzemat en la propietat corresponent de l'objecte JavaBean.

<h:inputText id="nom" value="#{bean.nom}">
Fixeu-vos que l'expressió EL l'escrivim dins l'atribut value del component. El primer paràmetre fa referència al nom del JavaBean i el segon, a la propietat nom (de tipus string) també del JavaBean.
Bé, doncs això hem de fer-ho per cadascun dels camps d'entrada de text del nostre formulari. Veiem una imatge amb el codi acabat.



Cada caixa de text (nom, cognoms, etc) té l'atribut value associat amb una propietat dins l'objecte JavaBean. 
Un altre detall molt important és l'atribut action del botó d'enviament del formulari. Vàrem dir que un botó pot tenir un atribut action i/o un atribut actionListener. Aquest últim l'emprarem per invocar métodes dins el JavaBean (ho veurem en properes entrades). L'atribut action l'utilitzarem per a navegar entre pàgines. En versions anteriors a JSF 2.0 calia declarar el que s'anomena regles de navegació  per a poder moure't entre diferents pàgines. En la versió actual això ja no és necessari (que no vol dir que no s'utilitzi). Amb JSF 2.0 existeix el que s'anomena navegació ímplicita, és a dir, JSF cerca una pàgina xhtml amb exactament el mateix nom que el definit en l'atribut action del botó (en aquest cas cercaria resultat.xhtml).
El que volem fer ara és mostrar les dades introduïdes per l'usuari en una nova pàgina. Per tant, crearem un nou arxiu de tipus Facelets Template Client que hereti de la plantilla original i li donarem el nom resultat.
Dins la secció content de la nova pàgina crearem una taula de dues columnes utilitzant el component panelGrid i mostrarem les dades entrades per l'usuari en l'atribut value del component outputText emprant el llenguatge EL. Per exemple:

 <h:outputText value="#{bean.nom}">

El codi de la pàgina resultat.xhtml quedaria així:


Bé, això podria ser un exemple senzill. Ara bé, calen certs retocs per a que esdevingui  un millor formulari. Per exemple, cal comprovar que l'usuari no es deixa cap camp en blanc o bé que el text introduït tingui una mínima longitud. Però això ho veurem un altre dia.

Gràcies.