Primefaces组件的oncomplete永远不会调用fileUpload

时间:2017-05-29 06:51:47

标签: jsf file-upload primefaces

我的页面上有一个表单上传组件,希望在文件上传完成和页面更新后在JavaScript中执行更多操作。

我将简单的日志语句用于测试" oncomplete"执行,但它永远不会发生。 文件已成功上传,页面的其他部分已更新,但没有" oncomplete"行动。 这是我的组成部分:

<p:fileUpload id="objectUpload1"
                fileUploadListener="#{importBackingBean.handleFileUpload}"
                mode="advanced" dragDropSupport="true"
                invalidFileMessage="Недопустимый тип файла"
                invalidSizeMessage="Размер файла превышает 5 МВ"
                cancelLabel="#{msg['stop_LABEL']}"
                uploadLabel="#{msg['Upload_LABEL']}"
                label="#{msg['Choose_LABEL']}" update="results objects_Data"
                sizeLimit="5000000" allowTypes="/(\.|\/)(xlsx|xls)$/"
                oncomplete="load();" />

我的Javascript:

<script type="text/javascript">
                function load() {
                    console.log('File Uploaded!');
                    $("button[id*='load']").click();
                }                       
</script>

按钮:

<p:commandButton value="Загрузить полисы"                   
                oncomplete="#{importModelBean.needToLoadMore ? 'load();' :'none();'}"
                id="load"
                action="#{importBackingBean.loadOneRow(importModelBean.current)}"
                process="@this" update="mainViewForm:objects_Data" />

当我手动点击按钮时,它可以正常工作。但是没有点击filepload的oncomplete。

1 个答案:

答案 0 :(得分:1)

使用给出的代码,我重现了这个场景。虽然已正确调用$("button[id*='load']").click();,但未显示任何日志。我猜测标识为load的按钮设置为ajax=”false”。如果这是真的,那么我认为在调用console.log('File Uploaded!');的那一刻记录了消息,但是在加载按钮处理之后页面被更新之后就被清除了。你需要日志吗?如果没有,只需删除console.log('File Uploaded!');代码,它就可以正常工作。

修改

我误解了你。我认为您担心的是该消息未记录在控制台中。

我已经在两个项目上测试了你的代码(在两台不同的计算机上运行),我无法重现你的问题。

项目1:
Primefaces 6.0
JSF 2.0
是8.5
IE 11

项目2:
Primefaces 5.x
JSF 2.0
Glassfish 4.1
谷歌浏览器

我甚至试过oncomplete=”alert(‘hello!’)”,但效果很好。

我认为问题出在其他地方。 对于平均时间,您可以尝试以下代码并查看它是否有效:

<p:fileUpload id="objectUpload1"
                fileUploadListener="#{importBackingBean.handleFileUpload}"
                mode="advanced" dragDropSupport="true"
                invalidFileMessage="Недопустимый тип файла"
                invalidSizeMessage="Размер файла превышает 5 МВ"
                cancelLabel="#{msg['stop_LABEL']}"
                uploadLabel="#{msg['Upload_LABEL']}"
                label="#{msg['Choose_LABEL']}" update="results objects_Data"
                sizeLimit="5000000" allowTypes="/(\.|\/)(xlsx|xls)$/"
                oncomplete="rc()" />

<p:remoteCommand name="rc"                
                oncomplete="#{importModelBean.needToLoadMore ? 'load();' :'none();'}"
                action="#{importBackingBean.loadOneRow(importModelBean.current)}"
                process="@this" update="mainViewForm:objects_Data" />

有关p:remoteCommand的更多信息,请参阅primefaces showcase RemoteCommand