[英]How to set a bean property before uploading a file using rich:fileUpload?
我的應用程序有一個模式面板,用戶可以在其中上傳文件,並在下拉菜單中選擇“文檔類型”。
我在上載事件期間使用<f:setPropertyActionListener>
設置文檔類型值,但有時在處理上載后設置屬性。 可能是因為正在生成另一個請求,並且此請求由另一個Web容器線程處理而發生。
<rich:modalPanel id="attachFiles" autosized="true">
<h:form id="formUpload" enctype="multipart/form-data">
<h:selectOneMenu id="docType" value="#{myMB.docType}" required="true" >
<f:selectItems value="#{myMB.docTypesSelectItems}" />
</h:selectOneMenu>`
<rich:fileUpload id="upload" fileUploadListener="#{myMB.handleUpload}">
<a4j:support event="onupload">
<f:setPropertyActionListener value="#{myMB.docType}"
target="#{myMB.docType}" />
</a4j:support>
</rich:fileUpload>
</rich:modalPanel>
發生這種情況時,在執行myMB.handleUpload
過程中myMB.docType
值為null,這是不期望的,因為應該認為該字段是必需的。
有沒有辦法確保僅在設置了docType
的屬性之后才執行方法myMB.handleUpload
?
我有一個類似的問題。
更改
<a4j:support event="onupload">
至
<a4j:support event="onclick">
設置文件類型操作將在上傳文件之前執行。 正是在打開資源管理器文件系統時
我將向選擇組件添加Ajax功能。 這樣,每次用戶更改select的值時,bean的值都會立即更新。 然后,在文件上傳方法內部,您可以依賴Bean值來表示用戶所做的最新選擇。
您只需要照顧用戶在不觸摸選擇的情況下開始文件上傳的情況即可。 您可能需要有一個合理的默認值,或者必須要小心非選擇並在上傳文件之前以某種方式使select字段成為必需。
<f:setPropertyActionListener value="#{myMB.docType}" target="#{myMB.docType}" />
我不明白你 目標與值相同。 您基本上是用self設置目標的值。 值本身不就是已經為null
嗎?
無論如何,我沒有執行RichFaces,所以我無法詳細介紹,但是我知道它在上載組件的內部使用Flash,並且這種構造通常會觸發一個單獨的(獨立的)請求,而不會考慮所有其他HTML表單參數。 此后,“正常” JSF輸入來自單獨的HTTP請求。 因此,您在這里沒有引入一些討厭的JS / ajax黑客就迷路了。 至少在理論上。
最好的選擇是,在偵聽器方法中將上載的文件作為Bean屬性保存下來,然后使用普通bean的action方法(以相同形式附加到某些UICommand
組件的方法)進一步處理該文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.