J'ai une classe de soutien du contrôleur abstrait pour les recherches et les listes de résultats:Spring MVC: @SessionAttributes partagé entre les contrôleurs?
@Controller
@SessionAttributes("query")
public abstract class SearchController<Q extends SearchQuery> {
@RequestMapping
public String performSearch(@ModelAttribute("query") Q query) {
....
}
@ModelAttribute("query")
public abstract Q createDefaultSearchQuery();
}
Plusieurs contrôleurs de recherche réels étendent cette classe de base.
Après avoir accédé à l'un des contrôleurs (disons /searchBooks.html
en utilisant BookSearchQuery implements SearchQuery
), la requête est correctement stockée dans la session, disponible pour les demandes suivantes.
Cependant, depuis la dernière demande (BookSearchQuery
) quand j'accéder à un autre contrôleur (par exemple en utilisant /searchAuthors.html
AuthorSearchQuery implements SearchQuery
) la requête est encore utilisé pour le nouveau contrôleur provoquant une ClassCastException
plus tard.
J'ai essayé de déplacer l'annotation @SessionAttribute
de la classe de support vers les classes d'implémentation, en vain.
Y at-il quelque chose que je fais mal ou est-ce par conception? Que puis-je faire?
Merci beaucoup!
I J'avais espéré que Spring qualifierait le nom de l'attribut dans le contexte de la session avec le nom du contrôleur Je ne peux pas renommer le nom de l'attribut car j'utilise le nom du bean modèle ("query") dans les méthodes du contrôleur abstrait. Des idées? –
Désolé, aucune idée, et je pense que ce que vous voulez n'est pas possible – sinuhepop
Très triste ... Merci beaucoup! –