我正在尝试在遗留应用程序上实现Spring Session。除了我发现自定义TagSupport出现问题的问题外,一切似乎都有效。
我对标签不是很熟悉,但我会尝试解释这个问题。 TagSupport类从会话中获取一个对象,并检查它是否应该显示JSP的某些部分。
代码看起来类似于:
public int doStartTag() throws JspException {
//get object from session
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession session = attr.getRequest().getSession(true);
Foo foo = (Foo)session.getAttribute("foo");
if(foo!= null){
return Tag.EVAL_BODY_INCLUDE;
}
return Tag.SKIP_BODY;
}
问题是..当我调试时,我看到doStartTag()方法中的代码被执行多次。前两次foo
被正确填充,并且该方法提供了所需的返回值,但随后它再次执行方法3并且foo
为空。 (在我试图加载的页面上调用标记两次。)
如果我从web.xml中删除springSessionRepositoryFilter
,doStartTag方法仍会多次执行,但每次填充foo
对象并且网页呈现正确。
我不确定为什么doStartTag()
代码会执行多次,尽管我不认为这是问题所在。我验证控制器只打了一次。我已经尝试过调试两者之间发生的事情,但是它在杂草中很常见。我还可以看到我有两个会话对象,一个名为JESSIONID
和SESSION
。我不确定这是否也是一个问题。
我有点过头了,如果有人有任何指示,我将不胜感激。非常感谢你。
我使用此处的指南实施了春季会话:http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession-xml.html 在这个过程中,我更新了一些弹簧库,因此图书馆冲突是不可能的。