0
我有要求從模態對話框上傳文件。所以我設法用簡單的非Ajax模式primeFaces這樣做fileUpload
組件:PrimeFaces UploadedFile afax sizelimit從模態對話框
<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>
當從豆調用save
方法我有一個商業邏輯運行的服務方法。現在我得到新的要求:將文件大小限制爲5 MB。但是,當我試圖在fileUpload
組件上使用sizeLimit
屬性時 - 我什麼都沒有發生。原因是驗證是在客戶端,但禁用ajax
這是不可能驗證。
我試圖採取advanced
模式,但得到了幾個問題:
- 對bean的
uploadedFile
是requestScoped
- 所以當save
按鈕調用我不能得到的數據。我只能將其保存在fileUploadListener
- 但問題來了:我需要將另一個業務數據保存爲該流程的一部分。上傳的文件是用戶提供的信息的一部分。沒有這些數據我就不能調用保存文件。 - 當按下
upload
時,文件上傳時預覽(如果是圖像文件) - 預覽將在文件上傳後立即消失。我怎麼能告訴他留在advanced
模式的底部字段fileUpload
組件?只有在按下按鈕save
時才能保存在服務器端?
所以問題是:如何在這種對話框中使用advanced
組件類型?我正在運行PrimeFaces 6.0,JSF 2.2(mojara)。
但是,這**也**是一個viewscoped豆,而不是像你在你的問題中陳述的requestcoped一個!而且我沒有看到你真的把它保存在某個地方(只有名字),除非在你的JSFHelper中存在。那麼最好在這個方法中包含內聯代碼。 – Kukeltje
@Kukeltje當按下對話框中的按鈕時,保存發生在'save'方法中。 JSFHelper僅用於從'UploadedFile'實例獲取字節。 –
對不起,我錯過了一小部分,我的不好。但你還**還改變了範圍,不是嗎? – Kukeltje