我的页面上有一个表单上传组件,希望在文件上传完成和页面更新后在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。
答案 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。