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

Mojarra 2.3下tabView调用event.getTab()恒为null的替代方案咨询

WildFly环境下PrimeFaces TabView tabChange事件空指针问题咨询

我从WildFly 16.x版本开始就被该问题困扰,至今已有三年,相关issue为PrimeFaces仓库的tabView: event.getTab() null in Mojarra 2.3 #3800。

相关代码

前端页面代码

<p:tabView switchType="ajax" id="tabViewHome" headerPosition="top" headerLocation="center" style="width:100%">            
    <p:ajax process="@parent" event="tabChange" listener="#{tabsChangesController.onTabChange}" update=":formNOTiFY:msgs"/>
    <p:ajax process="@parent" event="tabClose" listener="#{tabsChangesController.onTabClose}" update=":formNOTiFY:msgs"/>

    <p:tab title="Motorcycles" id="motorcycles">
        <ui:include src="SelectMotorcycles.xhtml"/>
    </p:tab>

    <p:tab title="Display Selected Motorcycle" id="selectedMotorcycles" closable="true">
        <ui:include src="DisplaySelectedMotorcycle.xhtml"/>
    </p:tab>
</p:tabView>

后端监听代码

public void onTabChange(TabChangeEvent event) {
   LOGGER.info(">>>>>>> TabChangeEvent event = {}", event);
}

报错日志

SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (default task-1) javax.el.PropertyNotFoundException: /index.xhtml @38,136 listener="#{tabsChangesController.onTabChange}": Target Unreachable, identifier 'tabsChangesController' resolved to null

已验证情况

经过测试,PrimeFace Showcase 10.0.0与11.0.0-RC1的TabView示例可在Mojarra 2.3、MyFaces环境下配合Jetty正常运行,启动命令为:

mvn clean jetty:run -Pnon-ee,mojarra-2.3

所用技术栈

  • PrimeFace (Elite) 10.0.7/11.0.0-RC1
  • Mojarra JSF 2.3.14.SP04 & OmniFaces 3.11.2
  • WildFly 25.0.0.Final (EE 8/9), Weld 4.0.2 (Final) & CDI 3.0
  • Java OpenJDK 17, Kotlin 1.5.31, Gradle 7.2, MongoDB 5.0.3
  • IntelliJ IDEA 2021.2.3, macOS Big Sur 11.6

问题解答

1. Mojarra与WildFly后续是否有可能修复该问题?

该问题本质是WildFly内置Mojarra版本的CDI注入适配缺陷,Mojarra上游社区早已提交对应修复补丁,但WildFly团队因要兼顾旧版本EE应用的兼容性,该修复优先级较低,目前没有列入近3个大版本的默认更新计划。如果不想切换服务器,也可以手动替换WildFly内置的Mojarra jar包为修复后的版本临时解决。

2. 在WildFly 25.0.0.Final版本上切换为Jetty或同类服务的操作难度如何?

迁移难度取决于你当前应用对WildFly特有功能的依赖程度:

  • 如果你仅使用了Servlet、CDI、JSF等通用EE组件,没有用到WildFly特有的EJB容器托管、JTA全局事务、内置消息队列、安全域等功能,迁移难度很低:只需调整项目依赖配置,把原本标记为provided的EE相关依赖改为直接打包进war包,再把服务器侧的配置(比如数据源、静态资源规则等)迁移到Jetty的上下文配置中即可,整体工作量在1人周以内。
  • 如果你用到了上述WildFly特有功能,需要先把对应逻辑改造为通用实现(比如把容器托管JPA改为程序内管理、把EJB改为CDI Bean),再进行迁移,整体工作量在2-3人周左右。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:54:02