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

Jakarta EE 9.1 Facelets XHTML页面正确命名空间如何配置?

Jakarta EE 9.1 Facelets XHTML 命名空间正确声明及问题排查

正确命名空间声明

你猜测的需要替换Facelets命名空间的思路是对的,但根节点的xmlns不需要修改,仍然使用w3的xhtml标准地址,JSF标签的官方新命名空间声明如下:

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="https://jakarta.ee/xml/ns/jakartaee/faces/core"
    xmlns:h="https://jakarta.ee/xml/ns/jakartaee/faces/html">

同时WildFly 25对旧的http://xmlns.jcp.org/jsf/*命名空间做了向下兼容,你原本的XHTML命名空间写法本身不会导致错误。

错误根因排查

你遇到的identifier 'bean' resolved to null错误和XHTML命名空间无关,是托管Bean的注解包导入错误导致的:
Jakarta EE 9全面替换了Java EE时代的javax.*包为jakarta.*包,你的托管Bean需要使用Jakarta包下的注解才能被CDI容器识别:

  • 不要使用javax.inject.Named,替换为jakarta.inject.Named
  • 不要使用javax.enterprise.context.*下的作用域注解,替换为jakarta.enterprise.context.*下的对应作用域
  • 如果使用JSF专属作用域,不要使用javax.faces.view.ViewScoped,替换为jakarta.faces.view.ViewScoped

示例正确的Bean写法:

import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Named;

@Named
@RequestScoped
public class Bean {
    private String input;

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }
}

确认项目依赖已全部替换为Jakarta EE 9.1的API、无残留旧的javax依赖即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:36:03