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

迁移至Jakarta EE11后Faces 4.1出现HTTP传输0状态码错误

Jakarta EE 11 (Faces 4.1) 中 "The Http transport returned a 0 status code" 错误的排查与解决

问题背景

将应用从旧版Jakarta EE迁移至Jakarta EE 11(使用Faces 4.1)后,频繁出现以下错误提示:

"The Http transport returned a 0 status code. This is usually the result of mixing ajax and full requests"

该问题在Jakarta EE 10(Faces 4.0)版本中未出现。

应用流程

  1. 通过自定义组件util:autoCompleteFaces(基于ui:composition,包含h:inputText和h:selectOneListbox)实现自动补全功能
  2. 用户选择列表结果后,组件内置JavaScript触发h:commandButton执行深度查询或获取更多信息

环境配置

  • Jakarta EE 11
  • Omnifaces 5.0
  • Payara 7.2026.1

自动补全组件代码

<util:autoCompleteFaces id="autoCompleteInputA1"  
                         inputTextSelectedValue="#{searchInputBean.idA1}" 
                         inputTxtClass="form-control"   messageTextClass="text-danger" 
                         inputTextValue="#{searchInputBean.searchWord}"    placeholder="Enter a word"
                         inputTextValueChangeListener="#{searchInputBean.valueChanged}"  listItemdValue="#{searchInputBean.selectionList}"
                         listBoxValueChangeListener="#{searchInputBean.completionItemSelected}"
                         required="false"  
                         renderId="coreFace:result"  >
</util:autoCompleteFaces> 

可能原因与解决方案

1. Faces 4.1 AJAX请求逻辑变更

Faces 4.1对AJAX请求的校验和上下文管理做了更新,当存在并发AJAX请求(比如自动补全的AJAX请求未完成就触发新请求),或者请求上下文被提前终止时,会抛出该错误。

2. 自定义组件JS触发逻辑冲突

组件内置的JavaScript可能未正确处理AJAX请求状态,导致未完成的AJAX请求与新触发的请求(同步或AJAX)产生冲突。

针对性解决方案:

  • 串行化AJAX请求:修改组件JS逻辑,确保前一个Faces AJAX请求完成后再触发h:commandButton。示例代码:
    function triggerCommandAfterAjax() {
        const activeRequests = jsf.ajax.activeRequests;
        if (activeRequests.length > 0) {
            setTimeout(triggerCommandAfterAjax, 100);
        } else {
            document.getElementById("yourCommandButtonId").click();
        }
    }
    
  • 统一使用AJAX请求:确保h:commandButton通过f:ajax发起请求,避免同步请求与AJAX请求混合:
    <h:commandButton id="queryBtn" action="#{searchBean.deepQuery}">
        <f:ajax execute="@form" render="coreFace:result" />
    </h:commandButton>
    
  • 排查渲染目标异常:暂时移除util:autoCompleteFaces的renderId属性,测试是否仍报错,逐步验证渲染目标组件是否存在上下文冲突。
  • 调整Payara配置:在Payara管理控制台的HTTP Service-Connector中,延长connectionTimeout参数,避免请求因超时被提前终止。
  • 升级OmniFaces版本:尝试升级到最新版OmniFaces 5.x,修复可能存在的Jakarta EE 11适配问题。

3. 调试建议

  • 用浏览器开发者工具Network面板,观察请求的触发顺序和状态,确认是否存在请求被取消(status=0)的情况。
  • 查看Payara服务器日志,获取完整错误堆栈,定位请求异常终止的具体环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 16:05:01