【问题标题】:Can't deploy war file containing primefaces to websphere无法将包含 primefaces 的战争文件部署到 websphere
【发布时间】:2018-04-17 14:15:43
【问题描述】:

我创建了一个包含 xhtml 页面和托管 bean 的 JSF war 文件。它的 lib 文件夹包含以下 jars:

  • myfaces-api-2.2.13.jar
  • myfaces-impl-2.2.13.jar
  • commons-xxxxxx.jar
  • jstl-1.2.jar

当我在 Webshpere 8.5.5 上部署它时,它运行良好。

我需要将 primefaces 添加到我的项目中。在war lib文件夹下添加primefaces jar文件(primefaces-6.0.jar)并将其部署到Websphere上后,它给了我这个错误:

java.lang.NoSuchMethodError:
  javax/faces/component/UIComponent.getPassThroughAttributes(Z)Ljava/util/Map;

注意:在 Eclipse 的 Tomcat v7.0 上进行测试时,它运行良好(使用 primefaces)。

我通过从 Eclipse 导出战争来生成战争。

【问题讨论】:

  • 这个必须和容器提供的JSF版本有关。可能您的 primefaces 期望 JSF 的版本比 WAS 提供给您的版本更新。尝试在你的存档中包含一个 JSF 实现(确保你的类加载器没有首先设置为父级)
  • PrimeFaces 6 应该在 JSF 2.0-2.2 上运行良好,并且该方法来自 JSF 2.2,所以这很奇怪......确定页面中没有“尝试”用户通过属性?是不是部署错误?比总是发布堆栈跟踪..

标签: java deployment primefaces websphere war


【解决方案1】:

您应该按照说明here 配置您的第三方JavaServer Faces 实现。看起来好像您在应用程序中包含了 JSF 2.2 库。在 JSF 2.2 here 中添加了找不到的方法。 WebSphere 8.5.5 提供 EE6 合规性,并提供以下 JSF 版本:SunRI 1.2 和 MyFaces 2.0。在这种情况下,似乎需要 JSF 2.2 实现,应用程序很可能正在使用传递属性并需要 JSF 2.2 库。我最初的想法是 primefaces 检测到应用程序中的 2.2 库,但 WebSphere 运行时 JSF 版本在运行时被拾取,因此出现错误。

【讨论】:

  • 所以您是说默认情况下在 WebSphere 8.5.5 中使用史前 jsf 版本?
  • 更新了我的答案以提供更多说明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 2017-02-24
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
相关资源
最近更新 更多