2012-07-19 51 views
0

我的ADF表格工作正常,除了一個奇怪的緩存問題。我有一個不使用數據庫的ADF表單。它有一個輸入文件字段,用戶可以選擇一個電子表格。當他們點擊Process File按鈕時,它會讀取電子表格,執行一些數據操作並寫入一個固定文件。當他們點擊Process File按鈕時,包含文件名的文本框變成基本上沒有框顯示的標籤,並且顯示他們上傳的文件的名稱。當我關閉瀏覽器並重新打開它時,頁面會返回,並且所選的最後一個文件仍將顯示在標籤中。我還注意到,在程序開始時初始化爲零的全局變量(在類中)的值從第一次測試結束時的最後一個值開始。在瀏覽器中多次刷新頁面不會重置頁面。它爲什麼這樣表現?我想如果瀏覽器在頁面再次出現時關閉,它應該重新開始。我通過在程序中再次設置爲零來解決全局變量問題,但我無法將文件名值設置爲null。它似乎不會生效,直到點擊一個按鈕。我應該做些什麼刷新?我嘗試用Java刷新整個頁面,但這似乎不起作用。如何重置ADF表單中的inputFile控件?

我還應該提到我使用的是Internet Explorer瀏覽器,當我在另一個瀏覽器中嘗試過,我之前沒有提過這個頁面時,Chrome瀏覽器仍然選擇了該文件。唯一一次開始時,我重新部署應用程序。

我正在使用jDeveloper 11.1.1.4。 (使用11.1.1.6也嘗試過)Weblogic服務器是10.3.6。我可以告訴你,我檢查了weblogic-application.xml文件中的會話選項卡。唯一檢查的是啓用會話跟蹤啓用會話跟蹤和啓用URL重寫。在記憶會話是無限的。在Cookie下,選中啓用Cookie並啓用HTTP代理緩存Cookie。在Cookie的使用期限內,Cookies從未過期。雖然,我沒有設置任何cookie,除非這是幕後操作。持久存儲設置爲內存。

其他一切都是空白的。我嘗試取消選中「啓用會話跟蹤」和「啓用URL重寫」並重新部署,但頁面只是掛起,根本不會加載。

所以,那就是我所在的地方。我一直在試圖找到一種方法來重置inputFile對象,但迄今爲止沒有運氣。我是ADF和Java的新手,所以請提出任何建議,我可能需要更多的細節。謝謝。

回答

5

假設您沒有明確地將inputFile組件的value屬性綁定到託管bean屬性,只需在組件實例上調用resetValue()即可。 INPUTFILE組件「綁定」屬性來創建這個bean的引用(JSF組件參考)

  • 有一個命令按鈕或事件你聽:

    1. 在請求或backingBeanScope
    2. 使用AF創建一個託管bean用於訪問組件參考並調用resetValue()

    上面的說明使它工作。現在,讓我們研究它:

    在JSF開發人員中,不推薦使用支持bean和組件綁定,而是首選動態組件查找。所以你可以跳過第3步,只需使用FacesContext.getCurrentInstance()。getViewRoot()。findComponent('id_of_inputFileComp');獲取RichInputFile實例的句柄。這種方法棘手的是你需要知道命名容器。

    弗蘭克

  • 1

    可以使用在valueChageListener(ValueChangeEvent VCE)的INPUTFILE的下面一行:

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

    Jdeveloper的版本12.1.3

    相關問題