我正在尝试将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中执行它。
提前感谢您的回答。