JSF. 2 Crear Proyecto
Creación de un proyecto web JSF en Netbeans.
- New Project → Categories: Java Web,
Projects: Web Application.
Click Next.
- Escribimos el nombre del proyecto y seleccionamos su
ubicación. Click Next.
- Seleccionamos el servidor y la versión de Java EE a utilizar. Click Next.
- En la pestaña Frameworks activamos el Java Server Faces, esto hace que nos aparezcan tres pestañas de configuración:
- Libraries: la
versión de JSF a utilizar.
- Configuration: la
ruta para acceder al servlet faces y que tipo de páginas
utilizaremos en el proyecto: facelest (XHTML) o JSP.
- Components:
componentes específicos para utilizar.
- Libraries: la
versión de JSF a utilizar.
- No tocamos nada y Click
Finish.
- New Project → Categories: Maven,
Projects: Web Application.
Click Next.
- Escribimos el nombre del proyecto y seleccionamos su
ubicación. Click Next.
- Seleccionamos el servidor y la versión de Java EE a utilizar. Click Finish.
- Botón derecho sobre el proyecto → Properties. En la pestaña Frameworks pulsamos Add y añadimos el framework Java Server Faces, esto hace que nos aparezcan tres pestañas de configuración:
- Libraries: la
versión de JSF a utilizar.
- Configuration: la
ruta para acceder al servlet faces y que tipo de páginas
utilizaremos en el proyecto: facelest (XHTML) o JSP.
- Components:
componentes específicos para utilizar.
- Libraries: la
versión de JSF a utilizar.
- No tocamos nada y click OK.
Abrimos index.xhtml y modificamos un poco la página. Crearemos un menú para ejecutar los distintos ejemplos a crear. El primer ejemplo será crear un campo de texto y un botón que mostrará una página JSF llamada holaMundo.xhtml.
Código de la página 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.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Curso JSF</title>
</h:head>
<h:body>
<h3>Menú ejemplos</h3>
<h:form>
<h:inputText value="Hola desde Facelet" />
<br />
<h:commandButton value="Ir a Hola Mundo" action="holaMundo" />
</h:form>
</h:body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Curso JSF</title>
</h:head>
<h:body>
<h3>Menú ejemplos</h3>
<h:form>
<h:inputText value="Hola desde Facelet" />
<br />
<h:commandButton value="Ir a Hola Mundo" action="holaMundo" />
</h:form>
</h:body>
</html>
Explicación del código index.html:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
Declaración de los espacios de nombres. JSF define un conjunto de
etiquetas que podemos usar. Se usa el prefijo h
para hacer referencia a un conjunto de etiquetas que se utilizan
básicamente para la construcción de formularios y demás elementos
de interfaz de usuario, por ejemplo <h:form>
crea un formulario. También podemos cargar la librería core con el
prefijo f.xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:commandButton
value="Ir
a Hola Mundo"
action="holaMundo"
/>
Esta etiqueta crea un botón submit para enviar un formulario, el
atributo value
es el texto a ver en el botón y action
es la acción a realizar,en este caso ir a la página holaMundo.
Podemos ver que la página a cargar se llama holaMundo
sin extensión y se encuentra en el mismo nivel que index.Siguiendo con el ejemplo vamos a crear una página que mostrará un saludo el cual podremos cambiar. Creamos un paquete, si este no existe, llamado com.me.jsf, sobre el paquete pulsamos botón derecho:
- New → Other
- Category: JavaServer Faces, Fyle types: JSF
Managed Bean. Click Next.
-
Class Name es el nombre de la clase Managed Bean a crear.
Escribimos SaludoMB, si miramos más
abajo vemos el valor del campo llamado Name,
su valor es saludoMB,
igual que el nombre de la clase, pero la primera letra en minúscula
(este valor se puede cambiar, pero es más simple dejarlo así).
saludoMB es la instancia del
bean que JSF creará y al que accederemos para referenciar nuestro
Managed Bean. Scope: request, que será el ámbito del
Managed Bean. Click Finish
Un Managed Bean es un Java Bean que puede ser accedido desde una página JSF, cada Managed Bean debe tener un nombre y un ámbito. Diferentes usuarios de la aplicación web tienen diferentes instancias del Managed Bean. En ellos se colocará la lógica de negocio y se encargan de conectar los campos de una página JSF con atributos del Managed Bean.
Abrimos el Managed Bean llamado SaludoMB, creamos un atributo String saludo con sus métodos getter/setter.
Código del Managed Bean SaludoMB.java:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class SaludoMB {
private String saludo;
/**
* Creates a new instance of SaludoMB
*/
public SaludoMB() {
}
public String getSaludo() {
if (saludo == null || saludo.equals("")) {
return "Bienvenido";
}
return saludo;
}
public void setSaludo(String saludo) {
this.saludo = saludo;
}
}
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class SaludoMB {
private String saludo;
/**
* Creates a new instance of SaludoMB
*/
public SaludoMB() {
}
public String getSaludo() {
if (saludo == null || saludo.equals("")) {
return "Bienvenido";
}
return saludo;
}
public void setSaludo(String saludo) {
this.saludo = saludo;
}
}
Explicación del código SaludoMB.java:
Las dos anotaciones que preceden a la clase son:
@ManagedBean indica que esta clase se registrará como un Managed bean, se creará una instancia en el ciclo de vida, el nombre de la instancia es el nombre de la clase con la primera en minúscula, pero se le puede añadir el atributo name e indicar otro nombre, por ejemplo @ManagedBean(name="miBean").
@RequestScoped indica el ámbito que definimos al crear el bean que puede ser:
- @RequestScoped ámbito de
petición, al terminar la petición se elimina la instancia del
bean.
- @SessionScoped ámbito de
sesión, mientras la sesión exista existe el bean.
- @ViewScoped: entre request y
session, el bean existirá mientras la petición se envíe a la
misma vista.
- @ApplicationScoped ámbito de
la aplicación web, mientras la aplicación se ejecute el bean
existirá.
Creamos una nueva página JSF llamada holaMundo, la extensión de las páginas será por defecto xhtml o jsp según se haya configurado.
- New File.
- Categories: JavaServer Faces, File Types: JSF
Page. Click Next.
- File Name es
el nombre de nuestra página que será holaMundo. Click
Finish.
<?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.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h3>Hola Mundo</h3>
<h:form>
<h:inputText value="#{saludoMB.saludo}" />
<h4>
<h:outputText value="#{saludoMB.saludo}" />
</h4>
<h:commandButton value="Enviar" />
</h:form>
</h:body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h3>Hola Mundo</h3>
<h:form>
<h:inputText value="#{saludoMB.saludo}" />
<h4>
<h:outputText value="#{saludoMB.saludo}" />
</h4>
<h:commandButton value="Enviar" />
</h:form>
</h:body>
</html>
Explicación del código holaMundo.xhtml:
Algunas de las etiquetas son etiquetas estándar de HTML. Otras tienen prefijos, como <h:head>, <h:body> o <h:inputText>, éstas son etiquetas JSF.
La etiqueta h:inputText es un campo para introducir texto, h:outputText muestra un texto y h:commandButton corresponde a un botón Submit de HTML.
Los campos de texto, botones, etc pueden ser enlazados con propiedades Java definidas en un Managed Bean. Los caracteres #"{expresion}" encierran expresiones EL (Expression Language ). En el atributo value de una etiqueta JSF puede utilizarse "#{managedBean.propiedad}" o "#{managedBean.metodo}". Por ejemplo, en el siguiente código se indica que la caja de texto se enlace con la propiedad saludo definida en la instancia del Managed Bean.
saludoMB
es la instancia del bean a usar y saludo
es una propiedad o atributo definida en el bean.
<h:commandButton
value="Enviar
Saludo"/>
La etiqueta h:commandButton tiene un atributo denominado action, cuyo valor (un String) es usado para activar una regla de navegación, de manera que al pulsar el botón se produce la acción, navegar a una página. Podría hacerse una llamada a un método de un Managed Bean que devolviera la cadena hacia la página donde se desea ir. Si no se especifica su atributo action la página se enviará a si misma.
Para mostrar el valor de la propiedad saludo de la instancia del Managed Bean SaludoMB como texto se usa:
<h:outputText
value="#{saludoMB.saludo}"
/>
El funcionamiento del ejemplo es sencillo, todo lo que se escriba en la caja de texto al pulsar el botón se mostrará en el texto de salida. Cuando la página es mostrada, JSF busca el bean saludoMB e invoca el método getSaludo para obtener el valor a mostrar. Cuando la página es enviada, JSF invoca el método setSaludo para guardar el valor del campo de texto del formulario en el atributo saludo del bean.
Comentarios
Publicar un comentario