【发布时间】:2016-12-11 09:14:52
【问题描述】:
我需要从模式对话框中获取上传的文件。所以我设法使用带有简单非 ajax 模式的 primeFaces fileUpload 组件来做到这一点:
<p:dialog id="dlg" widgetVar="dlg" modal="true" appendTo="@(body)"
header="#{messages['pages.dlg']}" closeOnEscape="true">
<h:form id="dlgForm" enctype="multipart/form-data">
<!-- Some business data -->
<p:fileUpload value="#{bean.uploadedFile}" mode="simple"/>
<p:commandButton id="saveBtn" action="#{bean.save}" update="messages" ajax="false"
partialSubmit="dlgForm"/>
</h:form>
</p:dialog>
当从 bean 调用 save 方法时,我的服务方法与业务逻辑一起运行。现在我得到了新的要求:将文件大小限制为 5 MB。但是当我尝试在fileUpload 组件上使用sizeLimit 属性时 - 我什么也没发生。原因是验证在客户端,但禁用 ajax 后无法验证。
我尝试采用advanced 模式,但遇到了几个问题:
- bean 上的
uploadedFile是requestScoped- 所以当调用save按钮时我无法获取数据。我只能将其保存在fileUploadListener中——但问题来了:我需要将另一个业务数据保存为该过程的一部分。上传的文件是用户提供的信息的一部分。我不能只调用没有这些数据的保存文件。 - 当按下
upload时,文件正在上传预览(如果是图像文件) - 文件上传后预览将立即消失。我如何告诉他从fileUpload组件留在advanced模式的底部字段?并且仅在按下save按钮时才保存在服务器端?
所以问题是:我如何在这样的对话框中使用advanced 组件类型?我正在使用 PrimeFaces 6.0、JSF 2.2 (mojara)。
【问题讨论】:
标签: ajax jsf primefaces