java - 如何重置 ADF 表单中的 inputFile 控件?

标签 java jdeveloper oracle-adf

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

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

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

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

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

最佳答案

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

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

上面的内容使其工作。现在,让我们完善它:

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

弗兰克

关于java - 如何重置 ADF 表单中的 inputFile 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11565935/

相关文章:

weblogic - Jdeveloper - 无法识别的选项 : -jrockit

java - 如何使两个应用程序模块共享相同的实体缓存?

java - 在对话框的 returnListener 中设置导航规则在 ADF 10g 中不起作用(JSF faces 1.1)

java - 如何使用 mvn -D 通过命令行在 Maven 中设置(多个)属性?

java - 将复杂对象注入(inject) Jersey 中的资源方法

java - 如何在java中将图像添加到窗体

java - 无法访问 ValueChangeListener 之外的 UIComponent 值

java - ADF 概念 - 两个站点之间的通信

java - MySql表越界异常-1

java - 将属性文件放在 IBM websphere 8.5 中的最佳位置?