我有一个 GWT 应用程序,我想在 Joomla 布局中运行它。这个概念似乎工作正常,应用程序正确加载。Joomla 使用 iFrame 来实现这一点,只需发送将启动 GWT 应用程序的 url。
我遇到的问题是我需要来自 Joomla 的某些信息,我将这些信息作为 url 中的参数传递。由于 GWT 应用程序是从 HTML 页面启动的,因此我无法访问这些参数,因此我向 Servlet 发出请求,其想法是我可以获取这些参数,将其保存在会话中,然后提供GWT 应用程序 HTML 页面。
这个概念很好用。我获取参数,将它们放入一个映射中,该映射进入一个基本 bean,然后我将 bean 存储为带有代码的会话属性:
request.getSession().setAttribute("sessionBean", sessionBean);
然后 Servlet 提供 GWT HTML 页面,该页面反过来加载应用程序,它做的第一件事就是触发 RPC 调用。我遇到的问题是在我的 RemoteServiceServlet 处理该调用时,我尝试使用以下代码获取我的 SessionBean:
SessionBean sessionBean = (SessionBean) this.getThreadLocalRequest().getSession().getAttribute("sessionBean");
我得到空值,仔细观察发现它实际上已经创建了一个新会话。我通过比较两个会话的 id 知道这一点。任何后续的 RPC 调用都可以访问最后一个会话,但我存储 SessionBean 的那个已经消失了!
它是一个已部署的 war 文件,启用了 cookie,并且在开发和生产模式下都以这种方式运行。
我想我可能误解了会话的处理方式!关于 GWT RPC 调用为何创建新会话的任何想法?或者,如果我完全错了,如何将这些需要的参数放入会话中?
任何帮助或想法将不胜感激!
提前致谢!
尚德尔