0

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

我还应该提到我使用的是 Internet Explorer 浏览器,当我在之前没有调出页面的不同浏览器 Chrome 中尝试它时,它仍然选择了文件。似乎只有在我重新部署应用程序时才会重新开始。

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

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

所以,这就是我所在的地方。我一直在尝试寻找一种方法来重置 inputFile 对象,但到目前为止还没有运气。我是 ADF 和 Java 的新手,所以请考虑到这一点提出任何建议,我可能需要更多细节。谢谢。

4

2 回答 2

5

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

  1. 在 request 或 backingBeanScope 中创建托管 bean
  2. 使用 af:inputFile 组件“绑定”属性创建对此 bean 的引用(JSF 组件引用)
  3. 有一个命令按钮或事件,您可以监听以访问组件引用并在其上调用 resetValue()

以上使其工作。现在,让我们对其进行润色:

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

坦率

于 2012-07-23T06:31:11.767 回答
1

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

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

Jdeveloper 版本 12.1.3

于 2014-12-14T18:57:29.333 回答