我對搜索和結果列表的抽象控制器支持類:Spring MVC:@SessionAttributes在控制器之間共享?
@Controller
@SessionAttributes("query")
public abstract class SearchController<Q extends SearchQuery> {
@RequestMapping
public String performSearch(@ModelAttribute("query") Q query) {
....
}
@ModelAttribute("query")
public abstract Q createDefaultSearchQuery();
}
若干實際的搜索控制器擴展此基類。
在訪問其中一個控制器(例如/searchBooks.html
,使用BookSearchQuery implements SearchQuery
)之後,查詢被正確存儲在會話中,可用於後續請求。
然而,當我從最後一個請求(BookSearchQuery
)訪問另一個控制器(使用AuthorSearchQuery implements SearchQuery
說/searchAuthors.html
)查詢仍然被用於新的控制器造成ClassCastException
以後。
我曾嘗試將@SessionAttribute
註解從支持類移至實現類,但無濟於事。
有什麼我做錯了或是由設計?我能做什麼?
非常感謝!
我希望Spring會以某種方式限定會話上下文中屬性的名稱和控制器名稱,我不能重命名屬性名稱,因爲我在抽象控制器的方法中使用了模型bean名稱(「query」)。任何想法? – 2010-10-26 16:37:23
對不起,沒有想法,我認爲你想要的是不可能的。 – sinuhepop 2010-10-27 09:44:01
很傷心......非常感謝! – 2010-10-27 22:49:59