AJAX JSF/PrimeFaces 中的文件上传错误:无法读取未定义的 属性 'debug'

AJAX file upload error in JSF/PrimeFaces : Cannot read property 'debug' of undefined

我有 2 种形式,其中一种是上传文件并执行一些操作的 uploadForm。上传后,当我提交保存按钮时,控制台出现错误:

  1. 未捕获类型错误:无法读取 属性 'length' of null
  2. jsf.js:578 主线程上的同步 XMLHttpRequest 已弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请查看 http://xhr.spec.whatwg.org/。 (程序):1
  3. 未捕获类型错误:无法读取未定义的 属性 'debug'

我找到了关于这个问题的相关主题,但仍然无法解决这个问题。我没有使用上传,所以我在这里混淆了。我只需要在每次调用保存按钮时更新表格。

<h:form id="uploadForm"  prependId="true" enctype="multipart/form-data">
    <center>
        <p:tabView   id="alltabs">
            <p:tab id="tabupload" title="Upload File">

                    <h:outputText value="Choose Microsoft Excel or TXT file to import (.xls or .xlsx or .txt) "/>

                    <p:fileUpload id="uploaddatafile"
                                  style="width: 350px"
                                  value="#{addbookCnt.uploadedFile}"
                                  fileUploadListener="#{addbookCnt.handleFileUpload}"
                                  mode="advanced"
                                  sizeLimit="1000000"
                                  allowTypes="/(\.|\/)(xls|xlsx|txt)$/"
                                  fileLimit="1">
                    </p:fileUpload>
                        <h:commandButton  id="btnSubmit"  actionListener="#{addbookCnt.utest()}" value="Save">
                            <f:ajax execute="@form alltabs tabupload " render="@all"/>
                        </h:commandButton>
                    </h:panelGrid>
                </h:panelGrid>
            </p:tab>
        </p:tabView>
    </center>
</h:form>

<h:form   id="tables">

</h:form>
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

@ManagedBean(name = "addbookCnt")
@ViewScoped
public class ABController implements Serializable {

    private UploadedFile uploadedFile;

    public void handleFileUpload(FileUploadEvent event) {
        LOG.info("handle file upload");
        uploadedFile = event.getFile();
    }

    public void utest() {
        LOG.info(uploadedFile.getFileName());
    }

    public UploadedFile getUploadedFile() {
        return uploadedFile;
    }

    public void setUploadedFile(UploadedFile uploadedFile) {
        this.uploadedFile = uploadedFile;
    }
}

我在 primefaces 5.2 中遇到了同样的问题(在一个页面上加载了两次)。创建了一个拉取请求 https://github.com/primefaces/primefaces/pull/143 我们将看看他们何时会解决这个问题。在那之前,您只需使用以下行直接修复损坏的缩小版本就足够了:

function(a){if(a.PrimeFaces){a.PrimeFaces.debug("PrimeFaces already loaded, ignoring duplicate execution.");return}