【问题标题】:p:fileUpload response returns before actionListener method ended in backing beanp:fileUpload 响应在 actionListener 方法以 backing bean 结束之前返回
【发布时间】:2015-06-30 08:08:19
【问题描述】:

我在 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 中处理它(解析、验证到实际数据等)。之后,如果文件有效且数据库中不存在此文件中的数据,则应呈现第 3 个表单上的“插入”按钮。当文件中有少量数据时 - 一切正常。但是当有大量数据时 - 响应在文件中的所有数据验证之前返回(在 actionListener 方法结束之前)。当文件末尾的错误数据并在发送响应后进行验证时,这会导致潜在的错误。

我想,我可以用另一种方式做到这一点 - 只需添加验证按钮并在上传后验证文件,但我想同时使用 fileUpload actionlistener 进行上传和验证。

有人知道为什么在 actionListener 方法结束之前返回响应吗?

【问题讨论】:

  • 您可以在 actionListener 方法的末尾设置“插入”按钮的呈现属性。

标签: jsf file-upload jsf-2 primefaces


【解决方案1】:

update 参数中删除:form3:fileUploadPanelGroup 并在actionListener() 的末尾更新组件。

RequestContext.getCurrentInstance().update(":form3:fileUploadPanelGroup");

【讨论】:

  • actionListener完成后如果response返回是一个很好的解决方案。但是响应在支持 bean 方法完成之前和调用 RequestContext.getCurrentInstance().update() 方法之前返回。
猜你喜欢
  • 2013-06-03
  • 1970-01-01
  • 2015-01-26
  • 2016-07-17
  • 2017-10-28
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多