GlassFish7中使用jsf.ajax报错“jsf未定义”的排查求助
问题原因
Jakarta EE 10配套的是Jakarta Faces 4.0,相比旧版JSF,API命名空间从javax.faces全面迁移到jakarta.faces,对应的全局JavaScript对象也从jsf改成了jakarta.faces,这就是你代码里jsf未定义的根本原因。
最小改动解决方案
直接把代码里的jsf替换成jakarta.faces就行,修改后的完整代码如下:
jakarta.faces.ajax.addOnEvent(function (data) { var ajaxstatus = data.status; // 状态值可选:"begin"、"complete"、"success" var ajaxloader = document.getElementById("ajaxloader"); switch (ajaxstatus) { case "begin": console.log("请求开始"); ajaxloader.style.display = "block"; // 显示加载组件 break; case "complete": console.log("请求完成"); ajaxloader.style.display = "none"; // 隐藏加载组件 break; case "success": console.log("请求成功"); // 可按需添加成功后的额外逻辑 break; } });
补充说明
- 确保页面使用
<h:head>标签,Jakarta Faces会自动注入所需的Ajax脚本,不用手动引入外部文件。 - 页面里要提前准备好ID为
ajaxloader的加载状态元素,比如:
<div id="ajaxloader" style="display:none; position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); padding:1rem; background:#fff; border-radius:4px;"> 加载中,请稍候... </div>
内容的提问来源于stack exchange,提问作者FarshiD Naqizadeh
相关产品推荐
相关产品推荐

