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
相关产品推荐
相关产品推荐

