我对搜索和结果列表的抽象控制器支持类: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