anchor.diff:  
   El ámbito para el backing bean debe extenderse hasta el ámbito de la vista, ViewScoped. Esto es necesario porque en esta página vamos a implementar acciones que llaman a métodos con parámetros y para que esta construcción en EL (Expression Language) sea posible el bean debe permanecer en memoria más allá del ámbito de la petición.
   
  -NOTE: Tened cuidado de elegir la clase ViewScoped correcta tras pulsar Ctrl + O. Tenemos que elegir javax.faces.view.ViewScoped y no javax.faces.bean.ViewScoped. La segunda clase es nueva en JSF 2.2 y totalmente compatible con CDI.
  +NOTE: Tened cuidado en elegir la clase ViewScoped correcta tras pulsar Ctrl + O. Tenemos que elegir javax.faces.view.ViewScoped y no javax.faces.bean.ViewScoped. La segunda clase es nueva en JSF 2.2 y totalmente compatible con CDI.
   
   Lo siguiente es crear la clase de negocio. En principio creamos una para cada entidad persistente. Ya teníamos el bean de negocio de la entidad Drone, ahora creamos uno para la entidad Trabajo. Como para la entidad Trabajo necesitamos implementar las operaciones de persistencia típicas de un CRUD: Crear, Modificar, Eliminar y Consultar, vamos a refactorizar el código de los beans de negocio creando una superclase abstracta que contenga estas operaciones básicas, de manera que en la clase concreta sólo irán las operaciones de negocio particulares de cada una.
   
  
positive.code: :hp-tags: JSF, JavaServer Faces, CRUD, EJB, Hibernate, backing bean, Primefaces
  :published_at: 2015-08-23
  
  En este post implementaremos el caso de uso del mantenimiento de la entidad Trabajo. La release de la que se parte es la 1.0.1, y a la que llegaremos será la 1.1.x.
  
  El mantenimiento de un entidad se conoce por sus siglas en inglés como CRUD (create, read, update and delete). En general un CRUD se implementará con tres páginas. La página inicial o de maestro, que se presenta inicialmente y contiene el listado de entidades a gestionar, la página de consulta de detalle, que muestra una información completa de una entidad, y la página de creación / edición del detalle, que permite dar de alta o modificar cualquier dato de una entidad concreta.
  
  
negative.code:     </ui:composition>
  ----
  
  El contenido de la zona variable _central_ se define en la página en general al principio para mayor claridad dado que aquí el orden no afecta. La zona del logo la hacemos insertable aunque en todas las páginas aparecerá como un include, esto nos da la posibilidad de tener páginas especiales que prescindan del logo si por ejemplo necesitamos espacio extra.
  
  Veamos ahora un ejemplo práctico de uso de plantilla, y que mejor manera que adaptando la pantalla de consulta del post anterior, de drones disponibles en una fecha, al nuevo diseño de pantalla. Lo primero que hacemos es mover el contenido desde el fichero `index.xhtml`, que ahora pasará a ser la pantalla inicial de la aplicación, al fichero `consulta-inicial.xhtml`.
  
  Luego tendremos que crear el panel para el logo, podéis ir al código de la aplicación y ver que su raíz es un elemento `<ui:composition... >` ya que irá inyectado en la plantilla, pero sin embargo no contiene elementos `<ui:define...>` ya que no se trata de una página pública que hace uso de la plantilla. He incluido aquí una sencilla animación realizada con la librería JS jQuery para que, si aún no la conocéis, tengáis una primera toma de contacto. Es muy importante conocerla al máximo ya que ahorra mucho tiempo de desarrollo en la parte de cliente. Además que Primefaces esté basado en jQuery es otro motivo más para dedicarle tiempo. Como nuestro proyecto incluye Primemefaces y éste incluye jQuery no tenemos ni debemos de añadir la librería de manera explícita. 
  
  WARNING: No es habitual, pero si una página de nuestro proyecto no usa ninguna estiqueta de Primefaces entonces tendremos que incluir de manera explícita la librería jQuery embebida en Primefaces añadiendo:
  
  
  `<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />`
  `<h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" />`
  