@Controller
@SessionAttributes("query")
public abstract class SearchController@modelattribute("query") Q query) {
....
}
@modelattribute("query")
public abstract Q createDefaultSearchQuery();
}
几个实际的搜索控制器扩展了这个基类.
在访问其中一个控制器(比如使用BookSearchQuery实现SearchQuery的/searchBooks.html)后,查询将正确存储在会话中,可用于后续请求.
但是,当我访问另一个控制器(比如/searchAuthors.html使用AuthorSearchQuery实现SearchQuery)时,最后一个请求(BookSearchQuery)的查询仍在用于新控制器,导致稍后出现ClassCastException.
我已经尝试将@SessionAttribute注释从支持类移动到实现类,但无济于事.
有什么我做错了还是这个设计?我能做什么?
非常感谢!
最佳答案
使用@SessionAttributes,这些对象将以相同的名称存储在HttpSession中,并且可以从不同的控制器访问(共享)它们.所以,Spring正确行事.
我认为你的场景中最好的方法是在每个子类中重命名这个属性(“BookQuery”,“AutorQuery”,……).根本不是很优雅:(
原文地址:https://www.jb51.cc/spring/431423.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。