Я использую <t:inputFileUpload>
для загрузки файлов в моем приложении. Выбранный файл (представленный как объект UploadedFile
) сохраняется только в его привязке (элемент в компоненте поддержки) после отправки формы. Поскольку в моем пользовательском интерфейсе используются динамические элементы, форма будет перерисована без отправки. В этом случае привязка значения становится недействительной, и пользователь должен повторно выбрать файл, используя <t:inputFileUpload>
.
Конечно, это не очень удобно для пользователя. Даже без отправки <t:inputFileUpload>
выбрасывает ValueChangedEvent
, в который я хотел бы зарегистрировать обработчик событий, который копирует новое значение (то есть загруженный файл) в привязку значения (т. Е. Член поддерживающего компонента). Поскольку я хочу разрешить загрузку нескольких файлов, у меня есть массив 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)
, чтобы это произошло так, как я хочу.