Introducción a JSF y Primefaces



Documentos relacionados
Primeros pasos con JavaServer Faces usando Eclipse

Curso de JavaServer Faces

5.3.2 Java Server Faces (JSF)

DESARROLLO DE APLICACIONES WEB Introducción a Java Server Faces

... Instituto Politécnico Nacional Ingeniería en Sistemas Computacionales. Práctica 11

RUEDA TORRES DULCE CAROLINA 3CM2 JSF JAVA SERVER FACES WEB APPLICATION DEVELOPMENT

RUEDA TORRES DULCE CAROLINA 3CM2 HIBERNATE EN UNA APLICACIÓN WEB

ATLAS MANUAL DE USUARIO COMPONENTE CODIGO DE BARRAS

Requisitos. Universidad ORT Arquitectura de Software

Agosto. Un primer JSP. Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / j a v a. p h p ]

WEB SERVICES CREACIÓN DEL SERVICIO

MODIFICAR Y CREAR ARCHIVOS DE UNA APLICACIÓN WEB

Facultad de Ingeniería Escuela de Ciencias y Sistemas Estructura de Datos Guatemala 2013 JSF + JSP + RichFaces

Taller de Sistemas de Información 2

ATLAS MANUAL DE USUARIO ARBOL ACCESIBLE

Proyecto ELO-330 Administración Salas del Departamento de Electrónica RC1. Gerardo Lecaros Felipe Díaz

Capítulo 4. Mini Tutorial

Formularios HTML. Desarrollo de Aplicaciones Web Departamento Informática y Sistemas Universidad de Murcia Curso 2013/2014

DISEÑO Y DESARROLLO WEB CON HTML 5, CSS Y DREAMWEAVER CS4 OBRA COMPLETA 2 VOLÚMENES

Introducción a JSF con NetBeans

INSTITUCION UNIVERSITARIA INPAHU BASES DE DATOS EN LA WEB

ATLAS MANUAL DE USUARIO COMPONENTE DE CALENDARIO

Curso de PHP con MySQL Gratis

PASO 1: Creamos un nuevo proyecto en NetBeans. Nos vamos a File y pulsamos sobre New Project

5.- Crear páginas web con Nvu

PROGRAMACIÓN PÁGINAS WEB CON PHP

FORMACIÓN ESPECIALIZADA EN HERRAMIENTAS Y LENGUAJES DE PROGRAMACIÓN WEB

Manual de Uso XML-Whois de Neubox. Manual del Sistema de XML Whois de Neubox Versión

Programación Orientada a Objetos con Java

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Java Avanzado Facultad de Ingeniería. Escuela de computación.

A CONTINUACION LOS PANTALLAZOS

Especificación WebService para:

Java Inicial (20 horas)

JSF 2.0 (Java Server Faces) Yadira Jarvio Hernández

Componentes de presentación

Presentación del Curso Virtual PROGRAMACIÓN WEB PHP CON MYSQL AVANZADO

Programa de Actualización Profesional Curso: Java Avanzado JEE7 Programa del Curso

POLITECNICO INTERNACIONAL ASIGNATURA: ELECTIVA DE PROGRAMA JAVA JSF DOCENTE: EDUARDO ROBAYO SEMANA 03

Lección 1 Introducción a Struts. uacosta@globalmentoring.com.mx

Programación páginas web. Servidor (PHP)

PROGRAMA FORMATIVO. Diseño y desarrollo web con HTML 5, CSS y Dreamweaver CS4 - Obra completa - 2 volúmenes

Introducción a JAX-WS Web Services

56h DREAMWEAVER 8 OBJETIVOS DEL CURSO. ÍNDICE 1 Conociendo Macromedia Dreamweaver. 2 Creación de sitios y páginas Web

Diseño y desarrollo Web con HTML 5, CSS y Dreamweaver CS 4

PROGRAMACIÓN PÁGINAS WEB JAVASCRIPT Y PHP

DESARROLLO WEB EN ENTORNO CLIENTE

PROGRAMA: Diseño y desarrollo Web con HTML 5,

Bases de Datos. Marta Elena Zorrilla Pantaleón Rafael Duque Medina DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN

Magento. Capacitación: - Administración. - Diseño. - Desarrollo.

LENGUAJES DE PROGRAMACIÓN 4 MÓDULOS. 56 Horas

EXTENSIÓN DE UML PARA APLICACIONES WEB

Diseño de páginas web 2011

Agentes con Interfaz Gráfica.

Programación orientada a objetos

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Páginas Web Barcelona

Aplicaciones web construidas a base de componentes:

Diseño WEB. Nivel: 5º semestre Horas semanales: 3 horas Código: Créditos: 2 créditos

XPERTO EN DISEÑO DE PÁGINAS WEB

Universidad ORT - Arquitectura de Software. Requisitos

Laboratorio de Aplicaciones Telemáticas

Capítulo 3. JavaServer Faces

MODELO DE IMPLEMENTACIÓN

Formularios. Formularios Diapositiva 1

Edición de Ofertas Excel Manual de Usuario

EUROPIO ENGINE LAB: FORMULARIOS WEB Y TABLAS HTML EN SOLO

Modo básico de funcionamiento del módulo Velneo vmodapache V7

Curso Online de Adobe Dreamweaver. Introducción :

Manual de NetBeans y XAMPP

ATLAS MANUAL DE USUARIO COMPONENTES JSF BUSINESS OBJECTS XI

Quiz 11: Crear preguntas. Juan Quemada, DIT - UPM

Introducción al desarrollo web (idesweb)


GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

HTML. HyperText Markup Language (Lenguaje de Marcas de Hipertexto)

Programación páginas web con ASP.NET 3.5 (C#)

ALTAS MANUAL DE USUARIO ENVÍO DE CORREOS ELECTRÓNICOS

1 Índice Introducción Propósito Alcance Modelo Arquitectónico Inicial... 3

TÉCNICO PROFESIONAL EN DISEÑO WEB PROFESIONAL CON DREAMWEAVER CS6

Nivel Intermedio. Escribir lenguaje de marcado HTML. Utilizar programas editores de HTML. Utilizar Hojas de Estilo en Cascada CSS

Adobe Dreamweaver CS3 - Curso online Creación profesional de sitios web

Taller de Sistemas de Información 2. Desarrollo Web

JavaServer Faces. Sesión 2: MVC en JSF. Experto Universitario Java Enterprise

Herramienta CASE (Bouml)

Manual de Integrador.NET

La única regla que debe de tener presente siempre, es que cada etiqueta que abra <etiqueta> debe de cerrarla en el mismo orden < /etiqueta cerrada>.

Práctica sobre compartición de instancias remotas.

Laboratorio 8. Hojas de estilo, plantillas y bibliotecas en Dreamweaver

CASO PRÁCTICO Nº OBJETIVO 2. TEMAS A DESARROLLAR

Dreamweaver CS6 para PC/Mac Sitios completamente CSS conforme a los estándares del W3C

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

FUNDAMENTOS DE LA TECNOLOGIA WEB

Ejercicios de AJAX y REST

ISJu: Técnicas de Programación Cartilla Teórica-Práctica Instalación del "Eclipse IDE for Java EE Developers" y el servidor "Apache Tomcat"

Curso de Java POO: Programación orientada a objetos

Curso de Técnico Superior Diseño Web Profesional con Dreamweaver CS6

Curso de Programación PHP

Curso Online de Microsoft Access Avanzado

Transcripción:

Introducción a JSF y Primefaces ESEI Dojos 2012/13 30 de noviembre de 2012 Índice 1. Material 1 1.1. Creación del proyecto Netbeans........................................ 2 2. Uso básico de JSF 2 2.1. Calculadora básica............................................... 2 2.1.1. Componentes a utilizar........................................ 2 2.1.2. Managed Beans............................................. 3 2.1.3. Definición de la vista JSF....................................... 4 2.2. Mejora 1: incluir conversores......................................... 4 2.2.1. Componentes a utilizar........................................ 4 2.2.2. Managed Beans............................................. 4 2.2.3. Definición de la vista JSF....................................... 4 2.3. Mejora 2: incluir histórico de operaciones.................................. 5 2.3.1. Componentes a utilizar........................................ 5 2.3.2. Managed Beans............................................. 5 2.3.3. Definición de la vista JSF....................................... 6 3. Uso de Primefaces 7 3.1. Versión AJAX del sumador......................................... 7 3.1.1. Componentes a utilizar........................................ 7 3.1.2. Definición de la vista JSF....................................... 7 3.2. Añadir Drag-and-Drop............................................. 9 3.2.1. Componentes a utilizar........................................ 9 3.2.2. Managed Beans............................................. 9 3.2.3. Definición de la vista JSF....................................... 9 1. Material VirtualBOX: http://www.virtualbox.org/ Imagen máquina virtual: dojo-jsf.vdi.gz [comprimida, 400 MB] 1

Imagen SWAP: swap.vdi [20 KB] Scripts de configuración GNU/Linux: dojo-jsf.sh bash dojo_jsf.sh Windows: dojo-jsf.bat Aviso: ajustad la variable VBOX_PATH indicando el path de instalación de VirtualBOX Usuarios configurados. login password dojo dojo root purple 1.1. Creación del proyecto Netbeans 1. Crear un nuevo proyecto Java Web Archivo -> Proyecto Nuevo -> Java Web -> Web Application [Siguiente] Project Name: sumador Use dedicated folder for storing libraries:./lib Add to Enterprise Application: <none> Server: GlassFish 3.1.2 Java EE version: Java EE 6 web Context path: sumador Seleccionar en Frameworks "Java Server Faces" Server Library: JSF 2.1 Configuration -> Prefered Page Language: Facelets Components -> Components Suite: Primefaces 2. Uso básico de JSF 2.1. Calculadora básica 2.1.1. Componentes a utilizar h:head, h:body Replican las etiquetas <head> y <body> de HTML. Utilizados para cierto tipo de configuraciones/inicializaciones (recursos CSS, JavaScript, etc) h:form Delimita un formulario JSF (todos los componentes JSF susceptibles de generar acciones y/o eventos deben incuirse dentro de estos componentes) h:panelgrid Contenedor de componentes, usado para controlar su posición en el formulario h:outputlabe Componente que genera un <label> de HTML h:inputtext Componente de captura de datos (caja de texto HTML) (vinculado a atributos de los @ManagedBean mediante el atributo value="") h:commandbutton Botón sobre el que usuario podrá actuar el comportamiento por defecto (cuando no se usa AJAX) es que genere una petición HTTP POST que desencade en el servidor el ciclo de procesamiento de JSF 2

atributo actionlistener="" especifica un método de un ManagedBean que actuará como manejador del evento de pulsación del botón atributo action="" especifica la siguiente vista JSF a la que se navegará, pude ser un String o un método de acción de un @ManagedBean que devuelva un String con una indicación de navegación. 2.1.2. Managed Beans 1. Crear un nuevo paquete de nombre controladores Sobre el proyecto sumador -> Source packages [Botón derecho] -> Nuevo -> Java Package Crear el paquete controladores 2. Crear una clase SumadorController en controladores Sobre el proyecto sumador -> Source packages -> controladores [Botón derecho] -> Nuevo -> Java Class Crear la clase SumadorController SumadorController.java @ManagedBean(name = "sumadorcontroller") @SessionScoped public class SumadorController implements Serializable { private double operador1; private double operador2; private double resultado; // constructor (automático con Fuente -> Insertar código -> Constructor) // getter y setter (automático con Fuente -> Insertar código -> Getter y Setter) public void dosuma() { sumar(); private void sumar() { resultado = operador1 + operador2; Anotaciones: @ManagedBean Marca la clase como @ManagedBean, opcionalmente pude asociársele un nombre a través del cual se vinculará con los componentes de las vistas JSF Indica que las instancias de la clase serán creadas y gestionadas por el framework JSF Nota: si se usa el API CDI (Context and Dependency Injection) se puede utilizar la anotación @Named que proporciona la misma finalidad junto con otras características añadidas @SessionScoped Especifica el alcance ( tiempo de vida ) del objeto, en este caso indica que es un objeto de sesión (otras alternativas: @RequestScoped, @ApplicationScoped, @ViewScoped) Importante: si se generan los import automáticamente, asegurad que se utilicen los de JSF (javax.faces.bean.[]) y no los de CDI (javax.enterprise.context.[]) 3

2.1.3. Definición de la vista JSF index.xhtml <?xml version= 1.0 encoding= UTF-8?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dt <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <title>esei Dojo</title> </h:head> <h:body> <h:form> <h:panelgrid columns="2"> <h:outputlabel value="operador 1:" for="op1"/> <h:inputtext id="op1" value="#{sumadorcontroller.operador1" label="operador 1"/> <h:outputlabel value="operador 2:" for="op2"/> <h:inputtext id="op2" value="#{sumadorcontroller.operador2" label="operador 2"/> <h:outputlabel value="resultado:" for="res"/> <h:inputtext id="res" value="#{sumadorcontroller.resultado" readonly="true"/> <h:commandbutton value="sumar" actionlistener="#{sumadorcontroller.dosuma()" action="index.xhtml"/> </h:panelgrid> </h:form> </h:body> </html> 2.2. Mejora 1: incluir conversores 2.2.1. Componentes a utilizar h:messages Especifica un espacio donde se mostarrán los mensajes de error generados durante el procesamiento en el servidor de la petición enviada por el navegador cliente (errores de validación, de formato/conversión, generados por la propia aplicación, etc) f:convertnumber Indica que los datos vinculados a un componente de entrada o de salida (<h:outputtext>, <h:inputtext>, etc ) al que se le adosa esta etiqueta serán tratados/formteados como un número con las restricciones que se fijen. 2.2.2. Managed Beans < nada que modificar > 2.2.3. Definición de la vista JSF index.xhtml <h:form> <h:messages style="color:red"/> <h:panelgrid columns="2"> <h:outputlabel value="operador 1:" for="op1"/> 4

<h:inputtext id="op1" value="#{sumadorcontroller.operador1" label="operador 1" required="true"> </h:inputtext> <h:outputlabel value="operador 2:" for="op2"/> <h:inputtext id="op2" value="#{sumadorcontroller.operador2" label="operador 2" required="true"> </h:inputtext> <h:outputlabel value="resultado:" for="res"/> <h:inputtext id="res" value="#{sumadorcontroller.resultado" readonly="true"> </h:inputtext> <h:commandbutton value="sumar" actionlistener="#{sumadorcontroller.dosuma()" action="index.xhtml"/> </h:panelgrid> </h:form> 2.3. Mejora 2: incluir histórico de operaciones 2.3.1. Componentes a utilizar h:datatable Especifica un componente de tipo tabla que se alimentará de un array o Collection que resida en un atributo de un @ManagedBean atributo value="": especifica el atributo que contiene la lista de elementos a partir cuales se generarán las filas de la tabla atributo var="": declara una pseudovariable que referenciará al elemento de la lista vinculado a la fila actual h:column Especifica los contenido de cada columna de la tabla. Es un contenedor de componentes JSF que podrán referenciar a la pseudovariable declarada en el atributo var. f:facet Especifica parámetros o características de otros componenetes JSF. En este caso se usa para especificar la cabecera de cada columna. 2.3.2. Managed Beans 1. Crear una nueva clase Operación en el paquete controladores public class Operacion { private int id; private double operando1; private double operando2; private double resultado; // constructor (automático con Fuente -> Insertar código -> Constructor) public Operacion(int id, double operando1, double operando2, double resultado) { this.id = id; this.operando1 = operando1; this.operando2 = operando2; this.resultado = resultado; // getter y setter (automático con Fuente -> Insertar código -> Getter y Setter) 5

2. Añadir un atributo operaciones con la lista de operaciones realizadas y un contador contadoroperaciones en la clase SumadorController y un método doeliminaroperacion() @ManagedBean(name = "sumadorcontroller") @SessionScoped public class SumadorController implements Serializable { private double operador1; private double operador2; private double resultado; private List<Operacion> operaciones = new ArrayList<Operacion>(); private int contador = 1 // getter y setter para operaciones (automático con Fuente -> Insertar código -> Getter y Setter) private void sumar() { resultado = operador1 + operador2; // anadir operacion a la lista + incr. contador operaciones.add(new Operacion(contador, operador1, operador2, resultado)); contador++; public void doeliminar(operacion operacion){ operaciones.remove(operacion); 2.3.3. Definición de la vista JSF index.xhtml : añadir después de </h:panelgrid> <h:datatable value="#{sumadorcontroller.operaciones" var="operacion" > <f:facet name="header"> Historico de sumas. </f:facet> <h:column> <f:facet name="header"> ID </f:facet> <h:outputtext value="#{operacion.id"/> </h:column> <h:column> <f:facet name="header"> Operando 1 </f:facet> <h:outputtext value="#{operacion.operando1"/> </h:column> <h:column> <f:facet name="header"> Operando 2 </f:facet> <h:outputtext value="#{operacion.operando2"/> </h:column> <h:column> <f:facet name="header"> Resultado </f:facet> <h:outputtext value="#{operacion.resultado"/> </h:column> 6

<h:column> <h:commandbutton value="eliminar" actionlistener="#{sumadorcontroller.doeliminar(operacion)" action="index.xhtml"/> </h:column> </h:datatable> </h:form> 3. Uso de Primefaces 3.1. Versión AJAX del sumador 3.1.1. Componentes a utilizar p:panel, p:outputpanel, p:panelgrid Paneles y componentes Primefaces que actúan como contenedores de componentes con los estilos y skins de Primefaces p:commandbutton Variante de <h:commandlink> con soporte para interaciones AJAX. Permite especificar que porciones de la vista JSF deben de ser enviadas al servidor para procesar sus modificaciones (atributo process) e indicar que elementos de la vista deberán ser actualizados una vez completada la acción (atributo update) p:inputtext Variante de <h:inputtext> que se integra con los estilos y skins de Primefaces p:messages Variante mejorada de <h:messages> p:datagrid, p:column Dispone un conjunto de elementos de un @ManagedBean (arrays ó Collection) en una parrilla. Cada celda de la parrilla contendrá uno o más componentes Primefaces. Permite paginación. 3.1.2. Definición de la vista JSF 1. Previo: organizar la vista en paneles <h:form> <p:messages id="errores" autoupdate="true"/> <p:panel id="panelsumas" header="panel de sumas" > <p:panelgrid columns="2"> <p:panel id="panelhistorial" header="historial de sumas"> <p:panel id="panelfavoritas" header="sumas favoritas"> </p:panelgrid> </h:form> 2. Componentes del panel de sumas 7

<p:panel id="panelsumas" header="panel de sumas" > <p:panelgrid columns="2" > <h:outputlabel value="operador 1:" for="op1"/> <p:inputtext id="op1" value="#{sumadorcontroller.operador1" required="true" label="operador 1"> </p:inputtext> <h:outputlabel value="operador 2:" for="op2"/> <p:inputtext id="op2" value="#{sumadorcontroller.operador2" required="true" label="operador 2"> </p:inputtext> <h:outputlabel value="resultado:" for="res"/> <p:inputtext id="res" value="#{sumadorcontroller.resultado" readonly="true"> </p:inputtext> <p:commandbutton value="sumar" ajax="true" actionlistener="#{sumadorcontroller.dosuma()" process="panelsumas" update="panelsumas panelhistorial errores"/> </p:panelgrid> 3. Componentes del historial de sumas <p:panelgrid columns="2"> <p:panel id="panelhistorial" header="historial de sumas"> <p:datagrid id="datagriddatos" columns="3" paginator="true" rows="6" emptymessage="sin operaciones" value="#{sumadorcontroller.operaciones" var="operacion"> <p:panel id="panel" header="#{operacion.id"> <h:panelgrid columns="2"> <h:outputlabel value="op1:"/> <h:outputtext value="#{operacion.operando1"/> <h:outputlabel value="op2:"/> <h:outputtext value="#{operacion.operando2"/> <h:outputlabel value="res:"/> <h:outputtext value="#{operacion.resultado"/> </h:panelgrid> <p:draggable for="panel" helper="clone" revert="true" /> </p:datagrid> </p:panelgrid> 8

3.2. Añadir Drag-and-Drop 3.2.1. Componentes a utilizar p:datatable, p:column Componentes Primefaces para la definición de tablas, soportan paginación de resultados, ordenación, selección múltiple, etc p:draggable Se vincula a un componente (normalmente un contenedor) indicando que es arrastrable. El modo de selección y el comportamiento de los arrastrables es configurable. p:droppable Se vincula a un componente (normalmente un contenedor) que puede ser el destino donde depositar los arrastrables. Si se desea vincular el elemento arrastrado con los datos concretos de algún componente de tipo lista (<p:datatable>, <p:datagrid>) se puede usar el atributo datasource. p:ajax Configura los eventos AJAX generados por el componente padre (en este caso un evento DropEvent de un <p:droppable>). El atributo listener indica el método manejador del evento en un @ManagedBean y el atributo update especifica los componentes de la vista a actualizar una vez completada su invocación. 3.2.2. Managed Beans 1. Incluir un atributo operacionesseleccionadas en SumadorController con sus respectivos get() y set(). Contendrá la lista de sumas favoritas. 2. Añadir un manejador de eventos para el evento Drop (recupera el objeto Operación seleccionado y lo añade a la lista operacionesseleccionadas) @ManagedBean(name = "sumadorcontroller") @SessionScoped public class SumadorController implements Serializable { private List<Operacion> operacionesseleccionadas = new ArrayList<Operacion>(); // getter y setter para operacionesseleccionadas (automático con Fuente -> Insertar código -> Getter y Setter) public void dodropoperacion(dragdropevent evento){ Operacion seleccionada = (Operacion) evento.getdata(); operacionesseleccionadas.add(seleccionada); 3.2.3. Definición de la vista JSF 1. Vincular un componente <p:draggable> al panel incluido dentro de cada celda del <p:datagrid> 2. Crear un panel que incluya un <p:datatable> vinculado al atributo operacionesseleccionadas 3. Vincular un componente <p:droppable> al panel de sumas favoritas, enlazarlo con el <p:datagrid> con la lista completa de operaciones y configurarlo para que su evento ondrop invoque mediante AJAX el manejador de eventos (atributo listener de <p:ajax>) <p:panelgrid columns="2"> <p:panel id="panelhistorial" header="historial de sumas"> <p:datagrid.> <p:panel id="panel" header="#{operacion.id"> 9

</p:datagrid> <p:draggable for="panel" helper="clone" revert="true" /> <p:panel id="panelfavoritos" header="sumas favoritas"> <p:outputpanel id="droparea"> <p:datatable value="#{sumadorcontroller.operacionesseleccionadas" var="operacionseleccionada" paginator="true" rows="5" emptymessage="sin operaciones favoritas"> <f:facet name="header">id</f:facet> <h:outputtext value="#{operacionseleccionada.id"/> <f:facet name="header">op1</f:facet> <h:outputtext value="#{operacionseleccionada.operando1"/> <f:facet name="header">op2</f:facet> <h:outputtext value="#{operacionseleccionada.operando2"/> <f:facet name="header">res</f:facet> <h:outputtext value="#{operacionseleccionada.resultado"/> </p:datatable> </p:outputpanel> <p:droppable for="panelfavoritos" datasource="datagriddatos" tolerance="touch" > <p:ajax listener="#{sumadorcontroller.ondropoperacion" update="panelfavoritos" /> </p:droppable> </p:panelgrid> 10