繁体   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