lunes, 27 de febrero de 2012

JSF (Java Server Faces)

Patrón más maduro y recomendable de J2EE, Framework q resuelve el patrón MVC (Módelo-Vista-Controlador) + DI (Inyección de Dependencias)+ORM (Object Relactional Mapping).
Se puede decir que como Swing usa el modelo de eventos(en Swing se usa Listener).
Para resolver el MVC usaremos Servlets. JSF para la vista usa JSP+JSTL(Standard Tag Library) que usa la libreria de etiquetas:<h: html> .
Si en Spring existen los Beans y en JPA los Entitys; en JSF existen los ManagedBeans.
La anotación es @javax.faces.bean.ManagedBean y nos libra de tener que especificar esta información en el archivo XML faces-config.xml.Se puede nombrar o simplemente si se omite  por defecto cogerá el nombre que le hallamos dado al archivo.
@ManagedBean(name="cargaCursoBean") 


También permite definir el ámbito de las clases manejadas y las hace accesibles desde expresiones EL(Expresion Language).
@RequestScoped :Para el ámbito de petición.
@SessionScoped :Para el ámbito de sesión.
@ApplicationScoped:Para el ambito de aplicación.
@ViewScoped:Mantiene valores en la misma vista (dura mas que el Request y menos que el
Session)
@FlashScoped:Se usa para los mensajes a usuarios por ejemplo los mensajes de error.


También existe otra anotación que permite inyectar en una referencia una instancia de una clase que este siendo manejada en algún ámbito.
@ManagedProperty(value="{bean}")


Para que un objeto sea serializable basta con que implemente la interfaz Serializable. Esto se hace para poder convertir un objeto en bytes y poder ser luego recuperado.
public class SuperBeanDeCurso implements Serializable{
}


El managedBean se realiza creando una clase .java
Para realizar la vista, nos creamos un .xhtml dentro de la carpeta war desde donde añadiremos las librerias para poder utilizar las etiquetas que nos harán falta para crear el jsf:                    
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets">
   <h:head id="head">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title>paso1!</title>
   </h:head>
   <h:body id="body">
   
      <h1>PASO1</h1>
          <h:messages></h:messages>
      <h:form id="miForm">
  <h:panelGroup id="panelito" 
  binding="#{paso1Bean.panel}">
  AQUI EL PANEL
  </h:panelGroup>
      <h1>Edita Curso</h1>
      <h:inputText  binding="#{paso1Bean.texto}" id="tt"
      value="#{wizardBean.curso.nombre}">
      <f:ajax event="keyup" 
      render="botonNext tt panelito miForm" 
      listener="#{paso1Bean.escuchaInputAjax}"
      />
      </h:inputText>
      <h:commandButton value="next" id="botonNext"
       disabled="#{empty wizardBean.curso.nombre}"
      action="#{wizardBean.next}" ></h:commandButton>
      <h:commandButton value="back" 
       action="#{wizardBean.back}" ></h:commandButton>

      </h:form>
   </h:body>
</html>


Para visualizarlo en la barra de direcciones lo pondremos con la extensión .jsf
Pasos interactivos:
Para usar Ajax se necesita la etiqueta <h:head>  es donde se coloca internamente el Javascript.
Ajax lo que hace es que recarga parte de la página ahorrando el refresco de una página entera,para mostrar los resultados de un evento.
Cada evento <f:ajax> se coloca dentro del componente relacionado.





3 comentarios:

  1. No entiendo ná de lo que pone aquí..lo único que sé es que mi mantekita me encantaaaaaaaaaaaaaaaa...Gracias, gracias, graciaaaaas

    ResponderEliminar
    Respuestas
    1. Este blog no es de diseño sino de frikis del java me deberia de ir planteando hacerme otro pa estos menesteres :P

      Eliminar
  2. El unico lugar que encontre donde dice -Para usar Ajax se necesita la etiqueta h:head es donde se coloca internamente el Javascript-. Exelente!!!

    ResponderEliminar