【问题标题】:Type API variable-resolver is deprecated after JSF 1.1. Use el-resolver instead在 JSF 1.1 之后不推荐使用类型 API 变量解析器。改用 el-resolver
【发布时间】:2011-10-27 19:44:20
【问题描述】:

我们最近从 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。

很遗憾,我在 IBM 页面上找不到要使用的 el-resolver 的答案。

编辑:

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 已打开 ...

【问题讨论】:

  • 来自 RAD 的警告消息:类 javax.el.E​​LResolver 必须是具体的(不是抽象的)。
  • 我们使用Spring,有org.springframework.web.jsf.DelegatingVariableResolver。它工作正常。也许尝试为此解析器添加依赖项?把它像 org.springframework.web.jsf.DelegatingVariableResolver

标签: java jsf websphere-portal ibm-rad ibm-jsf


【解决方案1】:

IBM 对 PMR 的回应:

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

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

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

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

问 - 是否有或是否有用于 portlet 的 el-resolver?

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我很困惑,异步 Web 应用程序如何与问题相关联。特别是因为堆栈跟踪包含在任何请求处理之前执行的FacesServlet.init
    • 嗯,根本不使用 Facelets。
    猜你喜欢
    • 2023-03-22
    • 2021-10-04
    • 2018-05-13
    • 1970-01-01
    • 2022-08-09
    • 2012-10-05
    • 2015-08-10
    • 1970-01-01
    • 2012-02-10
    相关资源
    最近更新 更多