tengo una clase de soporte para el controlador abstracto para las búsquedas y las listas de resultados:Spring MVC: @SessionAttributes compartido entre los controladores?
@Controller
@SessionAttributes("query")
public abstract class SearchController<Q extends SearchQuery> {
@RequestMapping
public String performSearch(@ModelAttribute("query") Q query) {
....
}
@ModelAttribute("query")
public abstract Q createDefaultSearchQuery();
}
Varios controladores de búsqueda reales se extienden esta clase base.
Después de haber accedido a uno de los controladores (digamos /searchBooks.html
usando BookSearchQuery implements SearchQuery
) la consulta se almacena correctamente en la sesión, disponible para solicitudes posteriores.
Sin embargo, cuando accedo a otro controlador (por ejemplo usando /searchAuthors.html
AuthorSearchQuery implements SearchQuery
) la consulta desde la última solicitud (BookSearchQuery
) se sigue utilizando para el nuevo controlador causando una ClassCastException
más adelante.
He intentado mover la anotación @SessionAttribute
de la clase de soporte a las clases de implementación, fue en vano.
¿Hay algo que estoy haciendo mal o es esto por diseño? ¿Que puedo hacer?
¡Muchas gracias!
I había esperado que Spring calificara de alguna manera el nombre del atributo en el contexto de la sesión con el nombre del controlador. No puedo renombrar el nombre del atributo porque estoy usando el nombre del bean modelo ("consulta") en los métodos del controlador abstracto. ¿Alguna idea? –
Disculpe, no tengo ideas, y creo que lo que quiere no es posible. – sinuhepop
Muy triste ... ¡Muchas gracias! –