You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法部署含PrimeFaces的WAR文件至WebSphere问题咨询

解决WebSphere 8.5.5部署含PrimeFaces的JSF应用时的NoSuchMethodError问题

这个错误java.lang.NoSuchMethodError: javax/faces/component/UIComponent.getPassThroughAttrib...本质是运行时使用的JSF版本过低导致的——getPassThroughAttributes()是JSF 2.2才新增的方法,而WebSphere 8.5.5默认自带的是JSF 2.0版本。当你的应用启用了依赖JSF 2.2+的PrimeFaces 6.0,但容器优先加载了自带的旧版JSF API时,就会出现这个找不到方法的错误。

下面是具体的解决步骤:

1. 修改应用的类加载顺序为Parent Last

WebSphere默认采用Parent First类加载策略(先加载容器自带的类,再加载应用打包的类),这会导致自带的JSF 2.0覆盖你WAR包中MyFaces 2.2.13的类。我们需要把该应用的类加载顺序改成Parent Last:

  • 登录WebSphere管理控制台,找到你部署的应用
  • 进入应用的配置页面,找到「类加载和更新检测」选项
  • 将「类加载顺序」设置为类加载器先加载应用程序类,然后再加载父类加载器的类(对应Parent Last)
  • 保存配置后重启应用

2. 添加ibm-web-ext.xml禁用容器冲突特性

如果修改类加载顺序后还是有问题,可以在WAR包的WEB-INF目录下创建ibm-web-ext.xml文件,明确禁用WebSphere自带的JSF相关特性,强制使用应用打包的MyFaces:

<?xml version="1.0" encoding="UTF-8"?>
<web-ext
    xmlns="http://websphere.ibm.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"
    version="1.0">
    <!-- 禁用与应用冲突的容器特性(比如自带的JSF) -->
    <disable-conflicting-container-features>true</disable-conflicting-container-features>
</web-ext>

3. 确认依赖包的完整性与兼容性

  • 确保你的WAR包lib目录中只有MyFaces 2.2.13的API和Impl包,没有混入其他版本的JSF相关JAR(比如Mojarra的包)
  • PrimeFaces 6.0和MyFaces 2.2.x是兼容的,这部分不需要调整

完成以上步骤后,重新部署应用,应该就能解决这个方法找不到的错误了。

内容的提问来源于stack exchange,提问作者user3612488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:21:06