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

迁移至PrimeFaces 12、Sapphire 5.1及WildFly 28时的javax.faces适配问题

解决PrimeFaces 12在WildFly 28下的javax.faces迁移问题

核心原因

PrimeFaces 12提供了两个分支版本:

  • 标准版本:基于Java EE(使用javax.*包)
  • Jakarta EE版本:基于Jakarta EE(使用jakarta.*包)

你当前使用的是标准版本的PrimeFaces 12,所以Jar包内仍保留javax.faces.*的导入,与WildFly 28的Jakarta EE环境不兼容。

解决方案步骤

1. 替换PrimeFaces依赖为Jakarta版本

在Maven的pom.xml中,将原PrimeFaces依赖替换为带jakarta classifier的版本:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>12.0.0</version>
    <!-- 指定Jakarta EE分支 -->
    <classifier>jakarta</classifier>
</dependency>

这个版本的Jar包内部所有javax.faces.*导入已替换为jakarta.faces.*,完全适配WildFly 28的环境。

2. 确认Sapphire模板的Jakarta兼容性

Sapphire 5.1同样需要使用Jakarta版本的包,替换对应的依赖:

<dependency>
    <groupId>org.primefaces.themes</groupId>
    <artifactId>sapphire</artifactId>
    <version>5.1</version>
    <classifier>jakarta</classifier>
</dependency>

如果该版本没有Jakarta classifier,需要升级到支持Jakarta的Sapphire版本(通常5.1及以上已提供Jakarta分支)。

3. 处理依赖冲突

WildFly 28自带Jakarta Faces 4.0 API,需确保Maven依赖中不会引入重复的JSF API:

  • 在PrimeFaces依赖中排除jakarta.faces-api(可选,避免与服务器自带API冲突):
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>12.0.0</version>
    <classifier>jakarta</classifier>
    <exclusions>
        <exclusion>
            <groupId>jakarta.faces</groupId>
            <artifactId>jakarta.faces-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 验证其他依赖

检查项目中其他JSF相关依赖(如OmniFaces、自定义组件库),确保它们均为Jakarta EE兼容版本:

  • OmniFaces需使用4.x及以上版本
  • 其他第三方库需替换为支持jakarta.*包的版本

额外注意事项

  • 清理Maven本地仓库:删除原标准版本的PrimeFaces Jar包,避免依赖混淆
  • 重新构建项目:执行mvn clean install确保所有依赖正确下载
  • 检查WildFly部署配置:确认服务器未加载旧的Java EE相关模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:08:29