簡體   English   中英

在使用rich:fileUpload上傳文件之前,如何設置Bean屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM