Ich habe eine abstrakte Controller-Support-Klasse für die Suche und Ergebnislisten:Spring MVC: @SessionAttributes zwischen den Controllern geteilt?
@Controller
@SessionAttributes("query")
public abstract class SearchController<Q extends SearchQuery> {
@RequestMapping
public String performSearch(@ModelAttribute("query") Q query) {
....
}
@ModelAttribute("query")
public abstract Q createDefaultSearchQuery();
}
Mehrere eigentlichen Such Controller erweitern diese Basisklasse.
Nach dem Zugriff auf einen der Controller (z. B. /searchBooks.html
mit BookSearchQuery implements SearchQuery
) wird die Abfrage in der Sitzung korrekt gespeichert und ist für nachfolgende Anforderungen verfügbar.
Allerdings, wenn ich einen anderen Controller zugreifen (zB /searchAuthors.html
mit AuthorSearchQuery implements SearchQuery
) die Abfrage aus der letzten Anfrage (BookSearchQuery
) noch für den neuen Controller verwendet wird, auf eine ClassCastException
später verursacht.
Ich habe versucht, die @SessionAttribute
Annotation von der Support-Klasse zu den Implementierungsklassen zu verschieben, ohne Erfolg.
Gibt es etwas, was ich falsch mache, oder ist das von Entwurf? Was kann ich tun?
Vielen Dank!
I hatte gehofft Spring würde den Namen des Attributs im Sitzungskontext irgendwie mit dem Controllernamen qualifizieren Ich kann den Attributnamen nicht umbenennen, weil ich den Model-Bean-Namen ("query") in den Methoden des abstrakten Controllers verwende. Irgendwelche Ideen? –
Sorry, keine Ideen, und ich denke, was Sie wollen, ist nicht möglich .. – sinuhepop
Sehr traurig ... Vielen Dank! –