尝试使用<f:ajax render="@form" listener="#{myBean.onSelectItemChange}" />
弹出窗口中的消息是&#34; emptyResponse:从服务器收到空响应。检查服务器错误日志。&#34;
在Firefox控制台中,错误是&#34; XML解析错误:XML或文本声明不在实体位置的开头#34;
相同的代码在我的本地环境中运行良好。我在本地和生产环境中都使用Tomcat 9。我只在生产中遇到错误。
xhtml页面以
开头<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
渲染后,<!DOCTYPE html>
会自动添加到页面顶部。
我还尝试在页面顶部添加<?xml version="1.0" encoding="UTF-8"?>
。
修改 更具体的错误: XML解析错误:XML或文本声明不在实体的开头位置:http://serverIP:8080/app/myPage第2行,第1列:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
更新: XHR响应如下所示:
<?xml version='1.0' encoding='UTF-8'?>
<?xml version='1.0' encoding='UTF-8'?>
<partial-response>
...
</partial-response>
第一行重复两次
顺便说一句,该应用程序在我的开发环境中正常运行。我在开发(Windows)和生产(Ubuntu)计算机上使用Tomcat9。
答案 0 :(得分:3)
如果客户端记录此错误,则服务器端XHTML不应该受到指责或仅是间接指责。了解browswer开发人员工具中真正的响应将显示真正的原因。
在你这样做之后,很明显有一个重复的&#39;序言。在标题中(或在谷歌搜索中)使用它很可能指向Stackoverflow中的现有Q / A并有效地使此Q / A与其重复:Ajax update has no effect, Firefox errors: XML or text declaration not at start of entity
我仍然将此作为答案发布有两个原因:
答案 1 :(得分:-2)
尝试使用“Inspect elements”在浏览器中找到表单的绝对id,然后将渲染值更改为此id 你会有这样的事情:
<f:ajax render="element:element1" listener="#{myBean.onSelectItemChange}"></f:ajax>