6

我们最近从 WebSphere Portal v6.1 升级到 v7.0,在这个过程中我们现在有可用的 JSF 1.2。在 Rad 8 中创建一个新的 Portlet 项目会创建一个 faces-config.xml,其中包含以下条目

<application>
    <state-manager>com.ibm.faces.application.DevelopmentStateManager</state-manager>
    <variable-resolver>com.ibm.faces.portlet.PortletVariableResolver</variable-resolver>
</application>

然后抱怨:类型 API 变量解析器在 JSF 1.1 之后被弃用。请改用 el-resolver。

不幸的是,我在使用 el-resolver 的 IBM 页面上找不到答案。

编辑:

System.out.println("Resolver: " + PortalUtil.getFacesContext().getApplication().getELResolver());

=> 解析器:com.sun.faces.el.FacesCompositeELResolver@696e696e

在 faces-config 中添加一个条目

<el-resolver>com.sun.faces.el.FacesCompositeELResolver</el-resolver>

删除或不删除变量解析器会导致:

java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:270)
    at javax.faces.webapp.FacesServlet.init(FacesServlet.java:164)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:358)
    ... 89 more

与 IBM 合作的 PMR...

4

2 回答 2

1

IBM 对 PMR 的回应:

问 - 忽略警告可能会产生什么后果?

Ans - 用户仍然可以使用变量解析器,功能不会受到影响。[将保留此标签以实现向后兼容性]

问 - 为什么生成的 faces-config.xml 仍然使用已弃用的方法?

Ans - 我们正在使用变量解析器来解析 portlet 变量,即使使用 JSF 1.2 也能很好地工作

问 - 是否会有 Portlet 的 el-resolver?

Ans - 将有一个用于 portlet 的 el-resolver。它将在 JSF portlet bridge 2.0 中提供,它将作为 WAS 的更新提供。它目前处于计划阶段,因此我无法为您提供可以在其中找到的精确版本。

于 2011-12-05T19:36:23.280 回答
0

我不想这么说,但如果我们谈论的是异步 Web 应用程序,那你就死定了。

JSF 1.2 引入了一个“已知错误”(我一直很喜欢这个短语)是FaceletsRenderer阻止您异步呈现 JSF 组件的类(因为 JSF 中的所有异步都使用伪造 FacesContext的;而不是可用于呈现的功能性组件)。 为此,您需要对 JEE6 友好的 JSF 2.1,否则您将需要完全不同的解决方案,正如@D1e他/她的评论中所指出的那样。祝您的组织好运。

于 2011-11-05T15:39:19.867 回答