我构建了一个Struts2应用程序,其中数据在请求标头中发送到我的应用程序。我有一个自定义拦截器来抓取这些数据,并使用它从数据库中检索一些数据并将其存储在会话中。然后我在结果JSP中使用这个会话数据。一个问题:在刷新页面之前,会话变量为空。Struts2会话数据在JSP中不可用,直到我刷新
这里是我的筹码:
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
这里是myInterceptor我的拦截方法:
ActionContext context = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context.get(StrutsStatics.HTTP_REQUEST);
HttpSession session = request.getSession(true);
MyObject obj = new MyObject();
String header = request.getHeader("HEADER_VALUE");
if(header != null) {
obj.loadByHeader(header);
session.setAttribute("value", obj);
}
return invocation.invoke();
这里是JSP代码:
<s:if test="#session.value == null">
...
</s:if>
就像我说的,这当我刷新或使用此值转到其他页面时工作。难道我做错了什么?或者,我能否在下一次获得价值?如果是后者,是否有另一种方法可以第一次获取这些数据?
对不起,但你没有回答在提供的限制问题。如果我刷新页面并使其工作,那么它必须遵循相同的路径。另外,我确实有日志记录。我已经记录了头文件已经发送,并且记录了如下所示的结果:“会话中设置的session.getAttribute(”value“)。它打印出来很好,告诉我它已经正确设置。 – geowa4 2011-03-25 04:36:10
对不起,但我没有阅读以及应该的,答案被修改。 – Quaternion 2011-03-28 18:04:43
不错........... – geowa4 2011-04-16 16:44:15