gpt4 book ai didi

java - 在刷新之前,Struts2 session 数据在 JSP 中不可用

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:37 25 4
gpt4 key购买 nike

我正在构建一个 Struts2 应用程序,其中数据通过请求 header 发送到我的应用程序。我有一个自定义拦截器,可以获取这些数据并使用它从数据库中检索一些数据并将其存储在 session 中。然后我在生成的 JSP 中使用该 session 数据。一个问题: session 变量为空,直到我刷新页面。

这是我的堆栈:

<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>

就像我说的,当我刷新或使用此值转到另一个页面时,这会起作用。难道我做错了什么?或者我可以在下次之前获取该值吗?如果是后者,是否有其他方法可以在第一次传递时获取该数据?

最佳答案

您应该能够一次性设置并使用它!我没有看到您提供的内容有任何问题,我的猜测是您第一次渲染 View 时没有经过拦截器。

发生这种情况有两种方式:1、您有多个包裹。其中一个包定义了您的自定义拦截器堆栈,而另一个则没有。第一次不渲染 View ,然后后续渲染确实会通过您的拦截器,2)如果您有多个将渲染 View 的操作,并且您在操作级别应用了拦截器,那么这也是可能的。

将打印/日志消息扔到拦截器中,并确保它在您认为正确的时候被执行。

编辑:将 defaultStack 和 myInterceptor 颠倒顺序,因为 params 拦截器不会在 myInterceptor 之前运行。

关于java - 在刷新之前,Struts2 session 数据在 JSP 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5400949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com