1

我们需要从PortletRequest我们的 Portal 应用程序中获取某些信息。我们使用 Portlet 应用程序中的实用程序方法来做到这一点。在这个 Utility 方法中,我们访问FacesContext.getCurrentInstance().getRequest()以获取 PortletRequest。我们在 DAO 层访问这个 Utility 方法。我们在这里无权访问请求参数。它有时有效,但有时它给了我NullPointerException。我找到了一个类似的线程来解释这一点。他们已经提到,如果它是同一个请求的一部分,那么你应该得到上下文。对我来说,这是同一个请求的一部分,但我没有得到上下文。你能帮我么。

4

2 回答 2

0

如果您的应用程序部署在单独的 WAR/JAR 文件中,则很可能使用了不同的类加载器。当我尝试访问 JBOSS5 上的休眠 HAR 存档中的 FacesContext 时,我遇到了类似的问题。我想出了一个使用反射 API 的成功解决方案。看看这个

如果您将整个应用程序捆绑到一个 EAR 中,您可能可以强制对整个耳朵使用一个类加载器,但 AFAIK 是特定于应用程序服务器的。

问候

于 2011-11-15T11:31:16.593 回答
0

如果您从 FacesContext.getCurrentInstance() 获得空 FaceContext,则没有为此线程/请求构造任何 FacesContext。

失败的请求是否来自非面孔入口点?例如事件或资源 portlet 请求?如果是这样,将不会创建 FacesContext。

与其依赖静态方法和线程本地存储来访问 DAO 中的数据,不如考虑从 PortletRequest 中提取您需要的内容,并将其传递到您的堆栈中。将诸如 FaceContext 或 PortletRequest 之类的表示层工件与 DAO 层混合是一种不好的做法。

于 2011-08-31T14:32:56.943 回答