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

使用Eclipse Transformer升级Richfaces到Jakarta 10失败求助

问题描述

我正尝试将重度依赖Richfaces的应用部署到EAP 8,后续计划替换Richfaces,但目前需先维持原有功能运行。请问有人成功实现过吗?

我通过maven-shade-plugin合并Richfaces的jar包,再用Eclipse Transformer处理该jar包后,打开包含a4j Output Panel的页面时出现如下错误:

Caused by: jakarta.faces.FacesException: Expression error: Named object org.richfaces.OutputPanel not found.

at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.util.Util.notNullNamedObject(Util.java:480)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.application.applicationimpl.InstanceFactory.createComponentApplyAnnotations(InstanceFactory.java:695)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.application.applicationimpl.InstanceFactory.createComponent(InstanceFactory.java:289)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:438)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.application.ApplicationWrapper.createComponent(ApplicationWrapper.java:570)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.application.ApplicationWrapper.createComponent(ApplicationWrapper.java:570)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.tag.faces.ComponentTagHandlerDelegateImpl.createComponent(ComponentTagHandlerDelegateImpl.java:507)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.tag.faces.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:151)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:139)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:57)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:163)
    at deployment.svweberv-frontend-2439.0.1-SNAPSHOT.war//org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.tag.faces.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:177)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:139)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:57)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:63)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:166)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:358)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:329)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:69)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:57)
    at jakarta.faces.impl@4.0.4.redhat-00001//jakarta.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:163)
    at jakarta.faces.impl@4.0.4.redhat-00001//com.sun.faces.facelets.tag.faces.CompositeComponentTagHandler.applyNextHandler(CompositeComponentTagHandler.java:139)
    at deployment.svweberv-frontend-2439.0.1-SNAPSHOT.war//org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)

我在旧的Richfaces jar包中找不到org.richfaces.OutputPanel类。

处理后的jar包放在WAR的WEB-INF/lib目录下,且faces-config.xml中未设置metadata-complete="true"。

我不知道该如何解决这个错误,恳请提供思路。

解决思路
  • 确认组件类的实际路径:a4j:outputPanel对应的实际类并非org.richfaces.OutputPanel,在RichFaces中,该组件的类是org.richfaces.component.html.HtmlOutputPanel。错误中出现的类名可能是Transformer处理时的映射错误,或者是组件定义文件(如.taglib.xml)中的配置被错误转换。
  • 检查Transformer的转换规则:Eclipse Transformer在将javax转换为jakarta命名空间时,可能误修改了组件的名称映射。需要检查Transformer的配置,确保RichFaces的组件定义文件(比如a4j.taglib.xml、rich.taglib.xml)中的<component-type>和<component-class>没有被错误替换。
  • 验证shade打包的完整性:maven-shade-plugin合并jar包时,可能遗漏了RichFaces的组件配置文件。检查合并后的jar包中是否包含META-INF/faces-config.xml、相关的.taglib.xml文件,以及这些文件中的组件定义是否正确。
  • 手动修复组件映射:如果Transformer处理后组件定义出现错误,可以手动修改处理后的jar包中的.taglib.xml文件,将错误的<component-type>org.richfaces.OutputPanel</component-type>修正为正确的类型(通常是org.richfaces.component.html.HtmlOutputPanel,具体以原RichFaces版本为准),或者检查组件类型的注册是否正确。
  • 排查类加载问题:确保处理后的RichFaces jar包中的类能够被EAP 8正确加载。可以检查EAP的日志,查看是否有类加载失败的信息,或者尝试将未合并的单个RichFaces jar包分别用Transformer处理后放入WEB-INF/lib,替代合并后的jar包,排查是否是shade打包导致的类缺失或冲突。
  • 参考EAP迁移文档:Red Hat EAP 8的迁移文档中可能有关于旧JSF组件库迁移的指导,确认是否有针对RichFaces的特殊迁移步骤或兼容性补丁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:08:08