簡體   English   中英

如何重置ADF形式的inputFile控件?

[英]How do I reset inputFile control in ADF form?

除了奇怪的緩存問題,我的ADF表單工作正常。 我有一個不使用數據庫的ADF表單。 它具有一個輸入文件字段,用戶可以在其中選擇電子表格。 當他們單擊“處理文件”按鈕時,它將讀取電子表格,進行一些數據操作並寫入一個固定文件。 當他們按下“處理文件”按鈕時,包含文件名的文本框基本上變成一個標簽,沒有顯示任何框,並且顯示了他們上載的文件的名稱。 當我關閉瀏覽器並重新打開它時,頁面又回到了最后選擇的文件,仍顯示在標簽中。 我還注意到,在程序開始時初始化為零的全局變量(在類中)的值從其在第一次測試結束時具有的最后一個值開始。 在瀏覽器中多次刷新頁面並沒有使頁面復位。 為什么會這樣呢? 我認為如果在再次打開頁面時關閉瀏覽器,則應該重新啟動。 通過在程序中再次將零設置為零,我避開了全局變量,但是我無法將文件名值設置為null。 在單擊按鈕之前,它似乎不會生效。 我應該做些刷新嗎? 我嘗試使用Java刷新整個頁面,但這似乎不起作用。

我還應該提到我使用的是Internet Explorer瀏覽器,當我在以前沒有打開過該頁面的其他瀏覽器(Chrome)中嘗試過該瀏覽器時,它仍然具有已選擇的文件。 似乎唯一重新開始的時間是當我重新部署該應用程序時。

我正在使用jDeveloper 11.1.1.4。 (也使用11.1.1.6進行了嘗試)Weblogic服務器為10.3.6。 我可以告訴你,我檢查了weblogic-application.xml文件中的“會話”選項卡。 唯一選中的是啟用會話跟蹤和啟用URL重寫以進行會話跟蹤。 內存中的會話是無限的。 在Cookie下,選中啟用Cookie和啟用Cookie的HTTP代理緩存。 在Cookie壽命下,選擇Cookie永不過期。 不過,我沒有設置任何cookie,除非這是在幕后做些事情。 永久存儲設置為內存。

其他一切都是空白。 我嘗試取消選中“啟用會話跟蹤”以及“啟用URL重寫和重新部署”,但是頁面只是掛起,根本無法加載。

所以,這就是我的所在。 我一直在嘗試尋找一種方法來重置inputFile對象,但到目前為止還算不上什么。 我是ADF和Java的新手,因此請記住任何建議,我可能需要更多詳細信息。 謝謝。

假設您沒有將inputFile組件的value屬性顯式綁定到托管bean屬性,則只需要在組件實例上調用resetValue()即可。

  1. 在request或backingBeanScope中創建托管bean
  2. 使用af:inputFile組件的“ binding”屬性來創建對此bean的引用(JSF組件引用)
  3. 讓您監聽命令按鈕或事件以訪問組件引用並在其上調用resetValue()

以上使它工作。 現在,讓我們完善一下:

在JSF開發人員中,不建議使用支持Bean和組件綁定,而是首選動態組件查找。 因此,您可以跳過第3步,只需使用FacesContext.getCurrentInstance()。getViewRoot()。findComponent('id_of_inputFileComp'); 獲取RichInputFile實例的句柄。 這種方法的棘手之處在於,您需要了解容器的命名。

坦率

您可以在inputFile的valueChageListener(ValueChangeEvent vce)中使用以下行:

oracle.adf.view.rich.util.ResetUtils
ResetUtils.reset(vce.getComponent())

Jdeveloper版本12.1.3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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