Spring vs EJB (Seam)
Ejercicio:
Terminamos el ejercicio de ayer pero con la añadidura que ahora pasemos a editar.
Repaso todos los pasos para hacer el ejercicio hasta la edición.
El objetivo del ejercicio completo es crear una página que introduzcamos el nombre de un cantante y nos aparezca una tabla con la lista de discos que tiene y en la tabla haber un enlace que rediriga a una página que lo edite y ahí editar el nombre del disco y que permanezca en la base de datos el cambio.
Pasos:
- Crear una interfaz y una clase que implemente algunos métodos como:
- String begin() con una anotación @Begin precediéndolo con un log.info marcando el inicio de la conversación.
- String end() con una anotación @End precediéndolo con un log.info marcando el fin de la conversación.
- void destroy() con las anotaciones @Destroy y @Remove precediéndolo.
- String increment() que será el método principal para buscar un disco dado un nombre aportado por el formulario, para ello crearemos un query usando un entityManager (que debe de tener la anotación @PersistenceContext) y también una lista simple para recojer todos los discos que devuelva la consulta con sus métodos get..() y set..() que también deben de estar en la interfaz.
- En la clase implementación no se nos debe olvidar poner el estado y el nombre para ello usaremos las anotaciones @StateFul y @Name("cantante")
- Crear un ".xhtml" que será la vista y que nos muestre el formulario inicial para buscar un cantante y que después también nos mostrará la tabla con los discos del cantante.
Para el formulario de búsqueda del cantante:- Primero usamos un encabezado h1 poniendo la propiedad de la clase implementación que queramos mostrar, por ejemplo el nombre, que creamos un String nombre en la clase con sus get y set: #{cantante.nombre}
- Colocamos la entrada de texto usando h:inputText y de valor la misma propiedad
- Finalmente colocamos un h:commandButton que es el encargado de asociar el valor del formulario con la acción de la clase. En el botón usaremos el action="#{cantante.increment}" y ya debería encontrarnos y mostrarnos de forma simple el cantante que queramos.
- En la misma página usaremos un h:dataTable de valor la propiedad de la clase que hicimos que era una lista simple: value="#{cantante.resultados}" y nombramos una variable para acceder a él: var="discos"
- En la tabla, antes de cerrar la etiqueta, colocamos las columnas que queramos mostrar, el nombre del cantante, el id, el nombre y un enlace especial para la edición del disco que queramos. h:column>#{discos.cantante.nombre}<
- El enlace sería usando la etiqueta s:link y la acción es la de una clase que tendremos que hacer que sería el método principal para mostrar el disco seleccionado y un view="/editaDisco.xhtml" que redirigirá a una nueva página.
- Antes de cerrar el enlace usamos una etiqueta f:param de nombre id y de valor discos.id, que lo que hará es pasar el id del disco por parámetro para que la página de edición encuentre el disco marcado.
- Creamos una interfaz y su implementación y pondremos casi los mismos métodos, no los mismos, el principal seria inicia() y otro secundario guarda()
- El método inicia() usa un log.info("") para saber que va bien y guardamos en un objeto de tipo Disco el resultado de este método: entityManager.find(Disco.class,id); que lo que hace es devolver un objeto de tipo Disco dado un id, que es el id que pasamos antes por enlace.
- El método guarda() simplemente llama al método merge() del entityManager metiendole el disco para que se guarde en la base de datos.
- Para la vista crearemos la página editaDisco.xhtml con un inputText y un commandButton al mismo estilo como hicimos en la otra vista.
En el resto del día hicimos ejercicios parecidos.
No hay comentarios:
Publicar un comentario