我在JSF 2.2应用程序中使用Primefaces 5.2 fileUpload actionListener时遇到问题。以下是代码示例:
<h:form id="form1" enctype="multipart/form-data" >
<h:panelGroup id="fileUploader">
<p:fileUpload fileUploadListener="#{fileUploadControllerBean.handleFileUpload}"
onstart="PF('statusDialog').show();"
oncomplete="PF('statusDialog').hide();"
mode="advanced"
dragDropSupport="false"
multiple="false"
update="form1:uploadMessagesGrowl,
:form2:fileUploadMessage,
:form3:fileUploadPanelGroup"
uploadLabel="#{common['validateFileStudents']}"
label="#{common['addFileStudents']}"
cancelLabel="#{common['cancelFileStudents']}"
allowTypes="/(.|/)(csv)$/"/>
<p:growl id="uploadMessagesGrowl" showDetail="true" />
</h:panelGroup>
</h:form>
我需要上传一个文件,并在actionListener中处理它(解析、验证实际数据等)。之后,如果文件有效,并且数据库中不存在来自该文件的数据,则应呈现第三个表单上的"插入"按钮。当文件中有少量数据时,一切都可以。但当有大量数据时,在验证文件中的所有数据之前(在actionListener方法结束之前)返回响应。当错误数据出现在文件末尾并在发送响应后进行验证时,这会导致潜在的错误。
我想,我可以用另一种方式来做这件事——只需添加验证按钮并在上传后验证文件,但我想同时使用fileUpload actionlistener进行上传和验证。
有人知道为什么响应在actionListener方法结束之前返回吗?
从update
参数中删除:form3:fileUploadPanelGroup
,并在actionListener()结束时更新组件。
RequestContext.getCurrentInstance().update(":form3:fileUploadPanelGroup");