如何以ADF格式重置inputFile控件?

时间:2012-07-19 17:10:45

标签: java jdeveloper oracle-adf

我的ADF表单工作正常,除了一个奇怪的缓存问题。我有一个不使用数据库的ADF表单。它有一个输入文件字段,用户可以选择电子表格。当他们单击“处理文件”按钮时,它会读取电子表格,执行一些数据操作并写入固定文件。当他们点击“处理文件”按钮时,包含文件名的文本框基本上变成了一个没有显示框的标签,它显示了他们上传的文件的名称。当我关闭浏览器并重新打开它时,页面会重新显示所选的最后一个文件仍显示在标签中。我还注意到,在程序开始时初始化为零的全局变量(在类中)的值以第一次测试结束时的最后一个值开始。在浏览器中多次刷新页面没有重置页面。为什么这样做?我想如果浏览器在页面再次启动时关闭,它应该重新开始。我通过在程序中再次设置为零来绕过全局变量,但是我无法将文件名值设置为null。它似乎只有在点击一个按钮后才会生效。我应该做些什么样的刷新?我尝试使用Java进行整页刷新,但这似乎不起作用。

我还应该提到我正在使用Internet Explorer浏览器,当我在其他浏览器中尝试使用它之前我还没有提起该页面时,Chrome仍然已经选择了该文件。它重新部署应用程序的唯一时间似乎是重新开始。

我正在使用jDeveloper 11.1.1.4。 (也使用11.1.1.6尝试)Weblogic服务器是10.3.6。我可以告诉你,我检查了weblogic-application.xml文件中的session选项卡。唯一检查的是启用会话跟踪和启用会话跟踪的URL重写。在内存会话是无限的。在Cookies下,检查启用cookie和启用cookie的HTTP代理缓存。在Cookie生命周期内,Cookie将永不过期。虽然,我没有设置任何cookie,除非这是在幕后做的事情。持久存储设置为内存。

其他一切都是空白的。我尝试取消选中启用会话跟踪和启用URL重写并重新部署,但页面只是挂起而根本不会加载。

所以,那就是我所在的地方。我一直试图找到一种方法可能重置inputFile对象,但到目前为止没有运气。我是ADF和Java的新手,所以请记住这些建议,我可能需要更多细节。感谢。

2 个答案:

答案 0 :(得分:5)

假设您没有将inputFile组件的value属性显式绑定到托管bean属性,您只需要在组件实例上调用resetValue()。

  1. 在request或backingBeanScope中创建托管bean
  2. 使用af:inputFile组件“binding”属性创建对此bean的引用(JSF组件引用)
  3. 有一个你监听的命令按钮或事件来访问组件引用并在其上调用resetValue()
  4. 以上使它成功。现在,让我们进行改进:

    在JSF开发人员中,不建议使用支持bean和组件绑定,而是首选动态组件查找。所以你可以跳过第3步,只使用FacesContext.getCurrentInstance()。getViewRoot()。findComponent('id_of_inputFileComp');获取RichInputFile实例的句柄。这种方法的棘手之处在于您需要了解命名容器。

答案 1 :(得分:1)

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

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

Jdeveloper版本12.1.3