martes, 8 de julio de 2008

+ Spring MVC

Para ver lo que está pasando por debajo de la ejecución en el proyecto de ayer (Eticom-libreria-web), es decir, que aparezca por consola lo que está sucediendo en cuanto a las consultas SQL de Hibernate a la Base de datos, hay que modificar la propiedad "hibernateProperties" del bean "SessionFactory" en el archivo "applicationContext-hibernate.xml" añadiéndole una propiedad:

<prop key="hibernate.show_sql">true</prop>

Y ahora, continuando con el proyecto de ayer (Eticom-libreria-web), en la salida por pantalla de los "libros.html" vamos a añadir una nueva columna para que nos muestre solamente los libros del autor seleccionado, esto tiene que ocurrir en la página "capitulosDeLibro.html", para lo cual enviamos en el enlace, el id del autor del que queramos sus libros: "http://localhost:8080/capitulosDeLibro.html?id=2".

Para que al enviar el id del objeto de nuestra tabla sea recogido en el controlador de la solicitud, hay que realizar dicha solicitud y recogerla en un método de nuestro controlador, anotado con la etiqueta "@RequestMapping("/pathCorrespondiente.html")". Luego hay que incluir otra anotación dentro del parámetro para poder recogerlo (en mi caso el 'id'):
@RequestMapping("/capitulosDeLibro.html")
public String listadoCapitulosDeLibro(ModelMap model, @RequestParam(value="id", required=true) Long id){
Session session = getSessionFactory().openSession();
Libro libro = (Libro) session.get(Libro.class,id);
model.addAttribute("capitulos", libro.getCapitulos());
// session.close();

return "listaCapitulos";
}
Nota: se puede apreciar que no se cierra la sesión porque, como ocurría ayer, si se cierra entonces ya no te permite acceder a otra consulta en la base de datos.
Nota2: vemos que la etiqueta "@RequestParam" puede tiene dos parámetros, 1) el "value", que es el nombre del parámetro que se recibe por la barra de direcciones (en este caso el "id"), y 2) el "required" que indica si el parámetro va a ser obligatorio o no (true por defecto, o false). Se podrían omitir dichos parámetros porque en este caso el parámetro es obligatorio, con lo que la cabecera del método quedaría asi:
"public String listadoCapitulosDeLibro(ModelMap model, @RequestParam Long id){...}".

Bueno, ahora vamos a añadirle la nueva columna en la vista "listaLibros.jsp" donde aparezcan los capitulos de cada libro. Así que en esta vista le añadimos un nuevo "display:column" pero que cierre la etiqueta con otra etiqueta del mismo tipo para poder incluir en medio, el codigo HTML que queramos:
<display:table name="libros" class="table" requestURI="" id="librosList" export="true" pagesize="10">
...
<display:column>
<a href="/capitulosDeLibro.html?id=${librosList.id}" />
</display:column>
</display:table>
Nota: en el display:table, el "name" es el nombre de la colección que se va a representar en la tabla y el "id" es la variable/objeto que empleamos en cada pasada del bucle.

Enlace al foro sobre esto

######## Formularios de Búsqueda ########

pendiente.

No hay comentarios: