Ir al contenido principal

JSF 2.0: Introducción

JSF es un framework para desarrollar UIs en aplicaciones web Java EE, que sigue el diseño Modelo-Vista-Controlador:

  • Modelo: contiene la lógica de negocio (managed beans)
  • Vista: son las interfaces gráficas de usuario (páginas JSF)
  • Controlador: gestiona las peticiones del usuario, mostrando en cada ocasión la vista apropiada (FacesServlet)

El servlet FacesServlet ya viene implementado, con lo que no tenemos que hacerlo nosotros. Cuando el controlador recibe una petición, comprueba si sigue un patrón definido en el fichero web.xml, como por ejemplo /faces/*. Si es así, la considera una 'Faces Request' y al procesarla crea un objeto conocido como JSF context, que contiene los datos y la navegación correspondiente a las vistas apropiadas.

Esta información se encuentra en el fichero faces-config.xml, que se conoce como 'JSF Navigation Model'. Este fichero contiene toda la posible navegación entre las páginas JSF de nuestra aplicación.

Veamos un ejemplo de regla de navegación entre páginas:
<navigation-rule>
    <from-view-id>/page1.xhtml</from-view-id>
    <navigation-case>
          <from-outcome>success</from-outcome>
          <to-view-id>/page2.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
          <from-outcome>failure</from-outcome>
          <to-view-id>/page3.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

Con esta regla de navegación, desde la página page1.xhtml, podemos ir a page2.xhtml si todo ha ido bien o a page3.xhtml si ha ocurrido un error. En posteriores post veremos cómo devolver 'success' o 'failure' para saber así a qué página hay que ir.

El ciclo de vida de JSF procesa la petición del usuario con sus datos de entrada, haciendo que el desarrollador no necesita escribir código para procesarla. Por ejemplo, cuando pinchamos sobre un botón en tiempo de ejecución, se activa automáticamente este ciclo de vida.
<h:commandButton value="I am a button"/>

Comentarios

  1. Me parece que JSF2 utiliza MVC2 (Modelo, vista y un unico controlador).

    ResponderEliminar
  2. Como muy bien comentas, JSF nos proporciona un servlet, que es el que actúa de controlador, y maneja las peticiones JSF.
    Eso sí, lo de MVC2 es la primera vez que lo escucho ;d

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Leer un fichero properties con java.util.Properties

Los ficheros .properties son simples ficheros de texto que se suelen utilizar para guardar parámetros de configuración, en forma de pares clave-valor. Ejemplo de fichero: configuration.properties #User parameters user.name=Ana user.language=spanish Si estamos usando Java, podemos utilizar la clase java.util.Properties para leer los parámetros de este fichero: private static final String USER_NAME = "user.name"; private static final String USER_LANGUAGE = "user.language"; public void showProperties() throws Exception { Properties p = new Properties(); InputStream is = App.class.getResourceAsStream("/configuration.properties"); p.load(is); is.close(); String userName = p.getProperty(USER_NAME); String userCountry = p.getProperty(USER_LANGUAGE); System.out.println("userName: "+userName); System.out.println("userLanguage: "+userCountry); } Después de ejecutar este método, obtendríamos la siguiente salida: ...

JSF 2.0: Managed Beans (III)

Anteriormente ya hemos visto que cuando se declara un bean, tenemos que darle un scope: application, session, view, request, none. Un scope es un mapeo entre nombres y objetos que se almacena durante un determinado periodo de tiempo. En este post vamos a explicar cada uno de ellos. Si declaramos el bean desde el fichero faces-config.xml, indicamos el scope en <managed-bean-scope> y si queremos hacerlo con anotaciones, utilizaremos @{Application,Session,View,Request,None}Scoped Application Con este scope, se guarda la información durante toda la vida de la aplicación web, independientemente de todas las peticiones y sesiones que se realicen. Este bean se instancia con la primera petición a la aplicación y desaparece cuando la aplicación web se elimina del servidor. Si queremos que el bean se instancie antes de que se muestre la primera página de la aplicación, usamos la propiedad eager a true. @ManagedBean(eager=true) ó <managed-bean eager="true"> Session...

JSF 2.0: Message bundles

Los message bundles son ficheros .properties que guardan mensajes del tipo clave=valor. Si centralizamos todos los mensajes de nuestra aplicación en estos ficheros, es más fácil poder localizarlos si queremos realizar algún cambio y también nos ayuda para la internacionalización de la aplicación. Ejemplo: messages.properties (en src/java/com/examples) con dos mensajes name=Tu nombre: age=Tu edad: ¿Cómo los declaramos? 1) En cada página JSF donde lo necesitemos <f:loadBundle basename="com.examples.messages" var="msgs"/> 2) De manera global en faces-config.xml <application>      <resource-bundle>           <base-name>com.examples.messages</base-name>           <var>msg</var>      </resource-bundle> </application> Esta opción es más eficiente ya que sólo crea el bundle una v...