Download instituto politecnico nacional escuela superior de computó

Document related concepts
no text concepts found
Transcript
INSTITUTO POLITECNICO NACIONAL
ESCUELA SUPERIOR DE COMPUTÓ
PRACTICA:
“Uso de Hibernate en una aplicación Web”
MATERIA:
WEB APPLICATION DEVELOPMENT
PROFESOR:
CIFUENTES ALVAREZ ALEJANDRO SIGFRIDO
ALUMNA:
ANA KAREN ECHAVARRIA ACOSTA
GRUPO:
3CM2
INTRODUCCION
En esta practica , se utiliza el IDE NetBeans para crear y desplegar una aplicación
Web que muestra datos de una base de datos. La aplicación web utiliza el marco de
Hibernate como la capa de persistencia para la recuperación y almacenamiento de
objetos típicos JAVA (POJOs) a una base de datos relacional.
Hibernate es el marco que proporciona herramientas para el mapeo relacional de
objeto (ORM). El tutorial se muestra cómo agregar soporte para el marco de
Hibernate para el IDE y crear los archivos necesarios de Hibernate. Después de crear
los objetos Java y configurar la aplicación para utilizar Hibernate, JSF se crea un bean
gestionado y las páginas JSF 2.0 para mostrar los datos.
Requisitos para llevar a cabo esta practica
Creacion de la base de datos.
1. Se descarga la base de datos Sakila, la cual es requerida para desarrollar esta
practica. (Descargar el archivo .ZIP)
2. Descomprimir el archivo .ZIP
3. En la consola de MySQL crear la base de datos e importar la base de datos.
4. En NetBeans se crea la conexión con MySQL
Creación de la aplicación web
En este ejercicio se creará un proyecto de aplicación web y se agregaran las
bibliotecas de Hibernate para el proyecto. Cuando se crea el proyecto, tendrá que
elegir Hibernate en el panel de Frameworks de l asistente New Project y especificar la
base de datos.
1. Elija Archivo> Nuevo Proyecto (Ctrl + Mayúsculas + N; ⌘ + Mayúsculas + N en
Mac) en el menú principal. Seleccione Aplicación Web de la categoría de
Java Web y haga clic en Siguiente.
2. Escriba DVDStore para el nombre del proyecto y establecer la ubicación del
proyecto.
3. Desmarque la opción Carpeta de uso dedicado, si esta selecciona. Haga clic
en Siguiente.
Para este tutorial no hay razón para copiar las bibliotecas del proyecto en una
carpeta específica, ya que no tendrá que compartir bibliotecas con otros usuarios.
4. Configurar el servidor para el servidor GlassFish 3 y fijar la versión Java EE Java
EE 6 Web. Haga clic en Siguiente.
5. Seleccione la casilla de verificación JavaServer Faces y el uso de las bibliotecas
por defecto JSF 2.0.
6. Seleccione la casilla de verificación Hibernate 3.2.5.
7. Seleccione la base de datos Sakila en el menú de conexión de base de datos
la lista desplegable. Haga clic en Finalizar.
Al hacer clic en Finalizar, el IDE crea el proyecto de aplicación web y abre el archivo
hibernate.cfg.xml y index.xhtml en el editor.
Si expande el nodo Bibliotecas en la ventana de Proyectos, se puede ver que el IDE
añade las bibliotecas de Hibernate para el proyecto.
Modificar el archivo de configuración de Hibernate
Cuando se crea un nuevo proyecto que utiliza el framework de Hibernate, el IDE crea
automáticamente el fichero de configuración hibernate.cfg.xml en la raíz del
classpath de contexto de la aplicación (en la ventana de Archivos, src / java). El
archivo se encuentra en el package> <default en el nodo Source Packages en la
ventana de proyectos. El archivo de configuración contiene información sobre la
conexión de base de datos, las asignaciones de recursos y otras propiedades de
conexión. Usted puede editar el archivo con el editor de multi-vista, o de modificar el
código XML directamente en el editor XML.
En este ejercicio va a modificar las propiedades predeterminadas especificadas en el
hibernate.cfg.xml para habilitar el registro de depuración para las sentencias SQL y
para permitir la gestión de Hibernate contexto de la sesión.
1. Abra hibernate.cfg.xml en la pestaña Diseño. Usted puede abrir el archivo
mediante la ampliación del nodo package> <default en los paquetes fuente
en la ventana de Proyectos y hibernate.cfg.xml doble clic.
2. En el editor de multi-vista XML, expanda el nodo Propiedades de configuración
en las propiedades opcionales.
3. Haga clic en Agregar para abrir el complemento Propiedad Hibernate cuadro
de diálogo.
4. En el cuadro de diálogo, seleccione la propiedad hibernate.show_sql y
establecer el valor a true. Esto permite que el registro de depuración de las
sentencias SQL.
5. Expanda el nodo Propiedades de Varios y haga clic en Agregar.
6. En el cuadro de diálogo, seleccione la hibernate.current_session_context_class
propiedades y establecer el valor de thread para permitir la gestión
automática de Hibernate contexto de la sesión.
7. Haga clic en Agregar nuevo bajo el nodo Propiedades y seleccione Varios
hibernate.query.factory_class en la lista desplegable Nombre de la propiedad.
8. Seleccione org.hibernate.hql.classic.ClassicQueryTranslatorFactory como el
valor de la propiedad. Haga clic en Aceptar.
Si hace clic en la ficha XML en el editor se puede ver el archivo en la vista XML. El
archivo debe ser similar al siguiente (las tres propiedades nuevas están en negrita):
<hibernate-configuration>
<session-factory name="session1">
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/sakila
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">######</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</property>
</session-factory>
</hibernate-configuration>
9. Guarde los cambios en el archivo.
Puede cerrar el archivo porque no es necesario editar el archivo de nuevo.
Creación del archivo de Ayudante HibernateUtil.java
Para utilizar Hibernate tiene que crear una clase auxiliar que se encarga de puesta en
marcha y que tiene acceso a SessionFactory de Hibernate para obtener un objeto
Session. La clase llama a configure () y carga el archivo de configuración
hibernate.cfg.xml y después construye la SessionFactory para obtener el objeto
Session.
En esta sección se utiliza el asistente de archivo nuevo para crear la clase de ayuda
HibernateUtil.java.
1. Haga clic en el nodo Source Packages y seleccione Nuevo> Otros para abrir el
asistente de New File.
2. Seleccione Hibernet en la lista Categorías y HibernateUtil.java de la lista Tipos
de archivo. Haga clic en Siguiente.
3. Escriba HibernateUtil para el nombre de clase y dvdrental para el paquete.
Haga clic en Finalizar.
El asistente genera un archivo hibernate.reveng.xml ingeniería inversa y abre el
archivo en el editor. Puede cerrar el archivo de la ingeniería inversa, ya que no tendrá
que editar el archivo.
Generación de archivos de mapeo de Hibernate y las clases Java
En este tutorial se utiliza un POJO (Plain Old Java objeto) para representar los datos en
cada una de las tablas de la base de datos que va a utilizar. La clase Java especifica
los campos de las columnas de las tablas y utiliza setters y getters simples para
recuperar y escribir los datos. Para asignar los POJOs a las tablas que usted puede
utilizar un archivo de mapeo de Hibernate, o el uso de anotaciones en la clase.
Puede utilizar los archivos de mapeo Hibernate y POJOs de un asistente para crear
base de datos de POJOs múltiples y archivos de mapeo basadas en tablas de bases
de datos. Cuando se utiliza el asistente, seleccione todas las tablas para las que
desea POJOs y archivos de asignación y el IDE a continuación, genera los archivos
para usted, basado en las tablas de bases de datos y agrega las entradas de mapeo
para hibernate.cfg.xml. Cuando se utiliza el asistente, puede elegir los archivos que
desea que el IDE para generar (sólo los POJOs, por ejemplo) y seleccione las
opciones de generación de código (generar el código que utiliza EJB 3 anotaciones,
por ejemplo).
Nota. El IDE también tiene asistentes para ayudarle a crear POJOs individuales y
archivos de asignación a partir de cero.
Crear el archivo de hibernación inversa Ingeniería
Si usted desea utilizar los archivos de mapeo Hibernate y POJOs de un asistente de
base de datos, primero debe crear un archivo de hibernate.reveng.xml ingeniería
inversa. Los archivos de mapeo Hibernate y POJOs de un asistente de base de datos
requiere hibernate.reveng.xml y hibernate.cfg.xml.
El archivo de la ingeniería inversa le permite tener un mayor control sobre la
estrategia de mapeo de base de datos. La ingeniería inversa de Hibernate asistente
crea un archivo de ingeniería inversa con una configuración predeterminada que se
puede editar en el editor XML.
Para crear el archivo de hibernación inversa ingeniería, realice los siguientes pasos.
1. Haga clic en el nodo Source Packages en la ventana de Proyectos y
seleccione Nuevo> Otros para abrir el asistente de New File.
2. Seleccione Hibernar Asistente para ingeniería inversa en la categoría de
Hibernate. Haga clic en Siguiente.
3. Especifique hibernate.reveng como nombre de archivo y src / java para la
carpeta. Haga clic en Siguiente.
4. Seleccione hibernate.cfg.xml en el menú archivo de configuración de la lista
desplegable, si no está seleccionado.
5. Seleccione las siguientes tablas de las tablas disponibles y haga clic en Agregar
para agregar las tablas para las tablas seleccionadas.
o
actor
o
categoría
o
película
o
film_actor
o
film_category
o
lengua
Haga clic en Finalizar.
El asistente genera un archivo hibernate.reveng.xml ingeniería inversa y abre el
archivo en el editor. Puede cerrar el archivo de la ingeniería inversa, ya que no tendrá
que editar el archivo.
La creación de los archivos de mapeo Hibernate y POJOs
Puede utilizar los archivos de mapeo Hibernate y POJOs de un asistente de base de
datos para generar los archivos para usted. El asistente puede generar un POJO y un
archivo de asignación correspondiente a cada mesa que seleccione en el asistente.
Los archivos de mapeo son archivos XML que contienen datos acerca de cómo las
columnas de las tablas se asignan a los campos en los POJOs. Usted necesita tener los
archivos hibernate.reveng.xml y hibernate.cfg.xml para utilizar el asistente.
Para crear los POJOs y archivos de asignación mediante un asistente, realice los
siguientes pasos.
1. Haga clic en el nodo Source Packages en la ventana de Proyectos y
seleccione Nuevo> Otros para abrir el asistente de New File.
2. Seleccione Hibernete archivos de asignación y POJOs de una base de datos en
la categoría de Hibernate. Haga clic en Siguiente.
3. Asegúrese de que los archivos hibernate.cfg.xml y hibernate.reveng.xml se
seleccionan en las listas desplegables.
4. Seleccione JDK 5 Características del lenguaje en las opciones de configuración
general.
5. Asegúrese de que el Código de dominio y las opciones de Hibernate XML
Asignaciones están seleccionados.
6. Seleccione dvdrental para el nombre del paquete. Haga clic en Finalizar.
Al hacer clic en Finalizar el IDE genera POJOs y Hibernate archivos de mapeo con los
campos asignados a las columnas especificadas en hibernate.reveng.xml. El IDE
también añade entradas de asignación de hibernate.cfg.xml.
<hibernate-configuration>
<session-factory>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3306/sakila</property>
<property name="hibernate.connection.username">myusername</property>
<property name="hibernate.connection.password">mypassword</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</property>
<mapping resource="dvdrental/FilmActor.hbm.xml"/>
<mapping resource="dvdrental/Language.hbm.xml"/>
<mapping resource="dvdrental/Film.hbm.xml"/>
<mapping resource="dvdrental/Category.hbm.xml"/>
<mapping resource="dvdrental/Actor.hbm.xml"/>
<mapping resource="dvdrental/FilmCategory.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Tenga en cuenta. Confirme que los elementos de mapeo se enumeran después de
que los elementos de la propiedad en el archivo hibernate.cfg.xml.
Puede ampliar el paquete dvdrental para ver los archivos generados por el asistente.
Usted puede utilizar el asistente de asignación de hibernación si desea crear un
archivo de mapeo de Hibernate que asigna una tabla específica de una clase
específica.
Creación de la FilmHelper.java Ayudante de Clase
Ahora va a crear una clase de ayuda en el paquete de dvdrental que se utiliza para
realizar consultas de Hibernate en la base de datos. Se utilizará el lenguaje de
consulta de Hibernate (HQL) editor para construir y probar las consultas para
recuperar datos. Después de probar las consultas que se va a crear métodos en la
clase de ayuda que construyen y ejecutar las consultas. A continuación, llamará a los
métodos de la clase de ayuda de un grano de JSF administrados.
Creación de la Clase
En esta sección podrás utilizar el asistente de nuevo archivo para crear el ayudante
de clase en el paquete de FilmHelper.java dvdrental. Va a crear una sesión de
Hibernate llamando getSessionFactory en HibernateUtil.java y crear algunos métodos
de ayuda para crear consultas para recuperar datos de la base de datos. Se llamará
a los métodos auxiliares de las páginas JSP.
1. Haga clic en el nodo de origen del paquete dvdrental y seleccione New> Java
Class para abrir el asistente de archivo nuevo.
2. Escriba FilmHelper para el nombre de la clase.
3. Confirme que dvdrental es seleccionado como el paquete. Haga clic en
Finalizar.
4. Añadir el siguiente código (en negrita) para crear una sesión de Hibernate.
public class {FilmHelper
Session session = null;
public FilmHelper() {
this.session = HibernateUtil.getSessionFactory().getCurrentSession();
}
}
5. Haga clic derecho en el editor y elegir las importaciones Fix (Alt-Shift-I; ⌘ +
Mayúsculas + I en Mac) para agregar las declaraciones de importación
requeridos (org.hibernate.Session) y guardar los cambios.
Ahora va a modificar FilmHelper.java agregar métodos que consulten la base de
datos.
Enumerar los títulos de las películas y recuperación de los actores mediante una
consulta HQL
En este ejercicio creará una consulta de Hibernate Language (HQL) consulta que
consulta la base de datos para recuperar una lista de los títulos de las películas de la
tabla de Cine. A continuación, agregue un método que cuestiona tanto el actor y
tablas Film_actor a buscar a los actores involucrados en una película en particular.
La tabla de Cine cuenta con 1000 registros por lo que el método para recuperar la
lista de las películas debe ser capaz de recuperar los registros basados en la clave
principal filmId. Va a utilizar el editor de HQL para construir y probar la consulta HQL.
Después de haber creado la consulta correcta va a agregar un método a la clase
que puede generar la consulta adecuada.
1. Haga clic derecho en el nodo del proyecto en la ventana de Proyectos y elegir
limpiar y construir.
2. Haga clic derecho en hibernate.cfg.xml en la ventana de Proyectos y
seleccione Ejecutar consulta HQL para abrir el editor de consultas HQL.
3. Seleccione hibernate.cfg de la lista desplegable en la barra de herramientas.
4. Pruebe la conexión escribiendo lo siguiente en el editor y hacer clic en el botón
Ejecutar consulta HQL ( ) En la barra de herramientas.
from Film
Al hacer clic en Ejecutar consulta HQL puede ver los resultados de la consulta en la
ventana inferior del editor de consultas HQL.
Si hace clic en el botón SQL se puede ver el equivalente de consulta SQL.
select film0_.film_id as col_0_0_ from sakila.film film0_
5. Escriba la consulta siguiente para recuperar los registros de la tabla de Cine en
el identificador de la película es entre 100 y 200.
from Film as film where film.filmId between 100 and 200
La ventana de resultados muestra una lista de registros. Ahora que ha probado que
la consulta devuelve los resultados deseados, puede utilizar la consulta en la clase de
ayuda.
6. Añadir los getFilmTitles siguiente método para FilmHelper.java para recuperar
las películas donde el id película es entre un cierto rango especificado por las
variables startID y endID.
public List getFilmTitles(int startID, int endID) {
List<Film> filmList = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery ("from Film as film where film.filmId between
'"+startID+"' and '"+endID+"'");
filmList = (List<Film>) q.list();
} catch (Exception e) {
e.printStackTrace();
}
return filmList;
}
7. Agregue el siguiente método getActorsByID que recupera a los actores en una
película en particular. El método construye la consulta mediante filmId como la
variable de entrada.
public List getActorsByID(int filmId){
List<Actor> actorList = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery ("from Actor as actor where actor.actorId in
(select filmActor.actor.actorId from FilmActor as filmActor where filmActor.film.filmId='"
+ filmId + "')");
actorList = (List<Actor>) q.list();
} catch (Exception e) {
e.printStackTrace();
}
return actorList;
}
8. Fije sus importaciones y guardar los cambios. Al fijar sus importaciones debe
elegir java.util.List y org.hibernate.Query.
Adición de métodos auxiliares adicionales
Ahora va a agregar otros métodos auxiliares que crean consultas basadas en una
variable de entrada. Usted puede comprobar las consultas en el editor de consultas
HQL.
1. Agregue el siguiente método para recuperar una lista de categorías de
acuerdo a filmId.
public Category getCategoryByID(int filmId){
List<Category> categoryList = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery("from Category as category where
category.categoryId in (select filmCat.category.categoryId from FilmCategory as
filmCat where filmCat.film.filmId='" + filmId + "')");
categoryList = (List<Category>) q.list();
} catch (Exception e) {
e.printStackTrace();
}
return categoryList.get(0);
}
2. Agregue el siguiente método para recuperar una sola película de acuerdo a
filmId.
public Film getFilmByID(int filmId){
Film film = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery("from Film as film where film.filmId=" + filmId);
film = (Film) q.uniqueResult();
} catch (Exception e) {
e.printStackTrace();
}
return film;
}
3. Agregue el método siguiente para recuperar el lenguaje cinematográfico de
acuerdo a langId.
public String getLangByID(int langId){
Language language = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery("from Language as lang where lang.languageId="
+ langId);
language = (Language) q.uniqueResult();
} catch (Exception e) {
e.printStackTrace();
}
return language.getName();
}
4. Guarde los cambios.
Creación de la JSF Managed Bean
En este ejercicio creará un JSF Managed Bean. Los métodos en el Managed Bean se
utilizan para mostrar los datos en las páginas JSF y para acceder a los métodos de la
clase de ayuda para recuperar los registros. La especificación JSF 2.0 le permite
utilizar las anotaciones en una clase de bean para identificar la clase como un JSF
Managed Bean, para especificar el alcance y para especificar un nombre para el
frijol.
Para crear el Managed Bean, realice los siguientes pasos.
1. Haga clic en el nodo de origen del paquete dvdrental y seleccione Nuevo>
Otros.
2. Seleccione JSF Managed Bean de la categoría JavaServer Faces. Haga clic en
Siguiente.
3. Tipo FilmController el nombre de clase.
Usted usará el nombre de filmController haba administrado como el valor de la
inputText y CommandButton en el index.xhtml página JSF al llamar a métodos en el
grano.
4. Seleccione dvdrental para el paquete.
5. Escriba filmController para el nombre que se utilizará para el Managed Bean.
6. Establecer el ámbito de la Sesión. Haga clic en Finalizar.
Al hacer clic en Finalizar, el IDE crea la clase de frijol y se abre a la clase en el editor. El
IDE añade el ManagedBean @ y anotaciones @ SessionScoped.
@ManagedBean
@SessionScoped
public class FilmController {
/** Creates a new instance of FilmController */
public FilmController() {
}
}
Tenga en cuenta. Tenga en cuenta que el nombre del bean gestionado no se
especifica explícitamente. De forma predeterminada, el nombre del grano es el
mismo que el nombre de la clase y comienza con una letra minúscula. Si desea que el
nombre de la haba de ser diferente del nombre de la clase, puede especificar
explícitamente el nombre como un parámetro de las anotaciones @ ManagedBean
(por ejemplo, @ ManagedBean (name = "myBeanName").
1. Agregue los campos siguientes (en negrita) a la clase.
@ManagedBean
@SessionScoped
public class FilmController {
int startId;
int endId;
DataModel filmTitles;
FilmHelper helper;
private int recordCount = 1000;
private int pageSize = 10;
private Film current;
private int selectedItemIndex;
}
2. Agregue el siguiente código (en negrita) para crear la instancia FilmController y
recuperar las películas.
/** Creates a new instance of FilmController */
public FilmController() {
helper = new FilmHelper();
startId = 1;
endId = 10;
}
public FilmController(int startId, int endId) {
helper = new FilmHelper();
this.startId = startId;
this.endId = endId;
}
public Film getSelected() {
if (current == null) {
current = new Film();
selectedItemIndex = -1;
}
return current;
}
public DataModel getFilmTitles() {
if (filmTitles == null) {
filmTitles = new ListDataModel(helper.getFilmTitles(startId, endId));
}
return filmTitles;
}
void recreateModel() {
filmTitles = null;
}
3. Añadir los siguientes métodos que se utilizan para mostrar la tabla y navegar
por las páginas.
4.
public boolean isHasNextPage() {
if (endId + pageSize <= recordCount) {
return true;
}
return false;
}
public boolean isHasPreviousPage() {
if (startId-pageSize > 0) {
return true;
}
return false;
}
public String next() {
startId = endId+1;
endId = endId + pageSize;
recreateModel();
return "index";
}
public String previous() {
startId = startId - pageSize;
endId = endId - pageSize;
recreateModel();
return "index";
}
public int getPageSize() {
return pageSize;
}
public String prepareView(){
current = (Film) getFilmTitles().getRowData();
return "browse";
}
public String prepareList(){
recreateModel();
return "index";
}
Los métodos que devuelven "índex" o "browse" le pedirá el controlador de
navegación JSF para intentar abrir una página llamada index.xhtml o browse.xhtml.
La especificación JSF 2.0 permite el uso de reglas de navegación implícitos en las
aplicaciones que utilizan la tecnología de Facelets. En esta aplicación, no hay reglas
de navegación se configuran en faces-config.xml. En su lugar, el controlador de
navegación a tratar de localizar una página adecuada en la aplicación.
5. Añadir los siguientes métodos que acceden a la clase de ayuda para obtener
los detalles adicionales de la película.
public String getLanguage() {
int langID = current.getLanguageByLanguageId().getLanguageId().intValue();
String language = helper.getLangByID(langID);
return language;
}
public String getActors() {
List actors = helper.getActorsByID(current.getFilmId());
StringBuffer totalCast = new StringBuffer();
for (int i = 0; i < actors.size(); i++) {
Actor actor = (Actor) actors.get(i);
totalCast.append(actor.getFirstName());
totalCast.append(" ");
totalCast.append(actor.getLastName());
totalCast.append(" ");
}
return totalCast.toString();
}
public String getCategory() {
Category category = helper.getCategoryByID(current.getFilmId());
return category.getName();
}
6. Fije sus importaciones (Ctrl + Mayúsculas + I) y guardar los cambios.
La creación de las páginas web
En este ejercicio creará dos páginas web para la visualización de los datos. Se
modificará el index.xhtml generado por el IDE para agregar una tabla que muestra
las películas en la base de datos. A continuación, creará browse.xhtml para mostrar
los detalles de una película cuando haga clic en el enlace "Ver" en la tabla. También
se creará una plantilla de página JSF que es utilizado por index.xhtml y browse.xhtml.
Creación de template.xhtml
En primer lugar, se creará el template.xhtml JSF Facelets Template que se utiliza en la
composición de la index.xhtml y páginas browse.xhtml.
1. Haga clic derecho en el nodo del proyecto DVDStore en la ventana de
Proyectos y seleccione Nuevo> Otros.
2. Seleccione la plantilla Facelets en la categoría JavaServer Faces. Haga clic en
Siguiente.
3. Escriba Template para el nombre de archivo y seleccione el primer estilo de
diseño CSS.
4. Haga clic en Finalizar.
Al hacer clic en Finalizar, el template.xhtml archivo se abre en el editor. La
plantilla contiene el código predeterminado siguiente.
<h:body>
<div id="top" class="top">
<ui:insert name="top">Top</ui:insert>
</div>
<div id="content" class="center_content">
<ui:insert name="content">Content</ui:insert>
</div>
</h:body>
5. Modificar el elemento <ui:insert> para cambiar el nombre por defecto
generado al "cuerpo".
<div id="content" class="center_content">
<ui:insert name="body">Content</ui:insert>
</div>
6. Guarde los cambios.
El contenido incluido dentro del elemento name="body"> <ui:define en index.xhtml
browse.xhtml y se insertará en el lugar identificado con <ui:insert Contenido
name="body"> </ ui: insert> en la plantilla.
Modificación de index.xhtml
Al crear la aplicación web, el IDE genera automáticamente la index.xhtml página. En
este ejercicio se modifica la página para mostrar una lista de títulos de películas. La
página JSF llama a los métodos en el JSF bean gestionado FilmController para
recuperar la lista de las películas y, a continuación se muestra una tabla con los títulos
de las películas y las descripciones.
1. Expanda la carpeta de Páginas Web en la ventana de Proyectos y index.xhtml
abierto en el editor.
El Asistente para nuevo proyecto generado por la página por defecto
index.xhtml siguiente.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
Hello from Facelets
</h:body>
</html>
2. Modificar la página para utilizar el <ui:composition> JSF y los elementos
<ui:define> y añadir un elemento <h:form>.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition template="./template.xhtml">
<ui:define name="body">
<h:form>
</h:form>
</ui:define>
</ui:composition>
</html>
uando comienza a escribir las etiquetas, el IDE agrega xmlns: ui =
"http://java.sun.com/jsf/facelets" declaración de biblioteca de etiquetas.
Los elementos <ui:composition> y <ui:define> se utilizan en combinación con la
plantilla de página que va a crear. Las referencias de elementos <ui:composition> la
ubicación de la plantilla que será utilizada por esta página. Las referencias de
elementos <ui:define> la posición en la plantilla que el código cerrado ocupará.
3. Añade los enlaces de navegación siguientes que llaman a los métodos
anteriores y el siguiente JSF managed bean.
<ui:define name="body">
<h:form>
<h:commandLink action="#{filmController.previous}" value="Previous
#{filmController.pageSize}" rendered="#{filmController.hasPreviousPage}"/>
<h:commandLink action="#{filmController.next}" value="Next
#{filmController.pageSize}" rendered="#{filmController.hasNextPage}"/>
</h:form>
</ui:define>
4. Agregue el siguiente elemento DataTable (en negrita) para generar la tabla
para mostrar los elementos recuperados.
<h:form styleClass="jsfcrud_list_form">
<h:commandLink action="#{filmController.previous}" value="Previous
#{filmController.pageSize}" rendered="#{filmController.hasPreviousPage}"/>
<h:commandLink action="#{filmController.next}" value="Next
#{filmController.pageSize}" rendered="#{filmController.hasNextPage}"/>
<h:dataTable value="#{filmController.filmTitles}" var="item" border="0" cellpadding="2"
cellspacing="0" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all"
style="border:solid 1px">
<h:column>
<f:facet name="header">
<h:outputText value="Title"/>
</f:facet>
<h:outputText value="#{item.title}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Description"/>
</f:facet>
<h:outputText value="#{item.description}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value=" "/>
</f:facet>
<h:commandLink action="#{filmController.prepareView}" value="View"/>
</h:column>
</h:dataTable>
<br/>
</h:form>
5. Guarde los cambios.
La página de índice mostrará ahora una lista de títulos de películas en la base de
datos. Cada fila de la tabla incluye un enlace "Ver" que invoca el método
prepareView en el bean gestionado. El método prepareView devuelve "navegar" y se
abrirá browse.xhtml.
. Nota Cuando se escriba la etiqueta <f:facet>, el IDE se sumará xmlns:. F = "tag
http://java.sun.com/jsf/core declaración de la biblioteca Confirme que la biblioteca
de etiquetas se declara en el archivo.
Creación de browse.xhtml
Ahora va a crear la página browse.xhtml para mostrar los detalles de la película
seleccionada. Puede utilizar la plantilla de Facelets asistente del cliente para crear la
página basada en la plantilla de template.xhtml JSF Facelets que ha creado.
1. Haga clic con el botón DVDStore nodo del proyecto en la ventana de
Proyectos y seleccione Nuevo> Otros.
2. Seleccione Cliente Facelets de plantilla en la categoría JavaServer Faces. Haga
clic en Siguiente.
3. Escriba buscar el nombre de archivo.
4. Busque la plantilla de la página haciendo clic en Más para abrir el cuadro de
diálogo Buscar archivos.
5. Expanda la carpeta de Páginas Web y seleccione template.xhtml. Haga clic en
Seleccionar archivo.
6. Seleccione <ui:composition> de la etiqueta raíz generado. Haga clic en
Finalizar.
Al hacer clic en Finalizar, el browse.xhtml archivo se abre en el editor con el
siguiente código.
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="./template.xhtml">
<ui:define name="top">
top
</ui:define>
<ui:define name="body">
body
</ui:define>
</ui:composition>
Se puede ver que el nuevo archivo especifica el archivo de template.xhtml y que la
etiqueta <ui:define> tiene el nombre de la propiedad = "body"
7. Agregue el siguiente código (en negrita) entre las etiquetas <ui:define> para
crear la forma y llamar a los métodos de la gestión FilmController frijol para
recuperar los datos y llenar el formulario.
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="./template.xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:define name="top">
top
</ui:define>
<ui:define name="body">
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Title:"/>
<h:outputText value="#{filmController.selected.title}" title="Title"/>
<h:outputText value="Description"/>
<h:outputText value="#{filmController.selected.description}"
title="Description"/>
<h:outputText value="Genre"/>
<h:outputText value="#{filmController.category}"/>
<h:outputText value="Cast"/>
<h:outputText value="#{filmController.actors}"/>
<h:outputText value="Film Length"/>
<h:outputText value="#{filmController.selected.length} min" title="Film
Length"/>
<h:outputText value="Language"/>
<h:outputText value="#{filmController.language}" title="Film Length"/>
<h:outputText value="Release Year"/>
<h:outputText value="#{filmController.selected.releaseYear}" title="Release
Year">
<f:convertDateTime pattern="MM/dd/yyyy" />
</h:outputText>
<h:outputText value="Rental Duration"/>
<h:outputText value="#{filmController.selected.rentalDuration}" title="Rental
DUration"/>
<h:outputText value="Rental Rate"/>
<h:outputText value="#{filmController.selected.rentalRate}" title="Rental
Rate"/>
<h:outputText value="Replacement Cost"/>
<h:outputText value="#{filmController.selected.replacementCost}"
title="Replacement Cost"/>
<h:outputText value="Rating"/>
<h:outputText value="#{filmController.selected.rating}" title="Rating"/>
<h:outputText value="Special Features"/>
<h:outputText value="#{filmController.selected.specialFeatures}"
title="Special Features"/>
<h:outputText value="Last Update"/>
<h:outputText value="#{filmController.selected.lastUpdate}" title="Last
Update">
<f:convertDateTime pattern="MM/dd/yyyy HH:mm:ss" />
</h:outputText>
</h:panelGrid>
<br/>
<br/>
<h:commandLink action="#{filmController.prepareList}" value="View All List"/>
<br/>
</h:form>
</ui:define>
</ui:composition>
</html>
Se puede ver que browse.xhtml y index.xhtml utilizará la plantilla de la misma página.
8. Guarde los cambios.
La ejecución del proyecto
Los fundamentos de la solicitud se ha completado. Ahora puede ejecutar la
aplicación para comprobar si todo funciona correctamente.
1. Haga clic en Ejecutar proyecto principal en la barra de herramientas principal o
haga clic en el nodo de aplicación DVDStore en la ventana de Proyectos y
seleccione Ejecutar.
El IDE guarda todos los archivos modificados, se basa la solicitud, e implementa la
aplicación en el servidor. El IDE se abre una ventana del navegador a la URL
http://localhost:8080/DVDStore/ que muestra la lista de las películas.
2. En el explorador, haga clic en "Ver" para cargar browse.xhtml para ver los
detalles de la película.