通过会话访问servlet在servlet中创建的Managed Bean

时间:2012-04-01 17:45:48

标签: session jsf servlets

我正在尝试将JSF变量传递给servlet,我发现这样做的方法是将这些变量存储在会话中,然后在servlet中访问它们。它在我的第一次测试中运行良好,但是现在,由于没有理由,它只是不起作用。

现在,servlet找不到会话,它返回null。好像不够奇怪,它只在我使用Firefox和Chrome时返回null,如果我使用IE它会正确返回会话。我已经重新启动所有浏览器以重新启动会话,但它仍然无效。

我的问题是:我需要将复合组件中的属性传递给servlet,这就是我正在做的事情:

...
<composite:implementation>
  <f:metadata>
    <f:event type="preRenderView" listener="#{Plupload.inicialize(cc.attrs.value, cc.attrs.servletPath,cc.attrs.runtimePreferences,cc.attrs.maxFileSize,cc.attrs.resizingWidth, cc.attrs.resizingHeight,cc.attrs.resizingQuality, cc.attrs.allowedTypes)}" />
  </f:metadata>
  ...
</composite:implementation>

Plupload是一个SessionScoped bean,其方法为“initialize”,我将所有需要的属性传递给会话。

在servlet中,我执行以下操作:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  HttpSession session = req.getSession(false);
  if (session == null) System.out.println("null session");
  plupload = (Plupload) session.getAttribute("Plupload");
  ...
}

执行doPost时的结果是在屏幕上打印“null session”并按行抛出NullPointerException:

plupload = (Plupload) session.getAttribute("Plupload");

当然,除非我在IE中执行它。

提前感谢您的回答。

0 个答案:

没有答案