ADF af:inputFile не вызывает ValueChangeEvent с помощью valueChangeListener

Я безуспешно пытаюсь связать RichInputFile с viewScopeBean.

Вот мой код:

jsff:

<af:panelGroupLayout id="pgl1" layout="horizontal">
      <af:inputFile label="Upload File" id="if1"
                    binding="#{viewScope.userBean.inputFile}"
                    valueChangeListener="#{viewScope.userBean.onFileUploadValueChangeListener}"
                    autoSubmit="true"/>
      <af:spacer width="10" height="10" id="s7"/>
      <af:commandButton text="Upload" id="cb1"
                        disabled="#{viewScope.userBean.inputFile.value == null ? true : false}"
                        partialTriggers="if1"
                        actionListener="#{viewScope.userBean.onUploadFile}"/>
  </af:panelGroupLayout>

фасоль:

public class UserBean{
private RichInputFile inputFile;
private UploadedFile file;
private String fileContent;
private String fileName;
private InputStream inputstream;

public UserBean() {
    super();
}

public void onFileUploadValueChangeListener(ValueChangeEvent valueChangeEvent) {
    resetValue();
    file = (UploadedFile)valueChangeEvent.getNewValue();
    try {
        inputstream = file.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void onUploadFile(ActionEvent actionEvent) {
    if (file != null && inputstream != null) {
        fileName = file.getFilename();
        StringWriter writer = new StringWriter();

    }
    if (inputFile != null) {
        inputFile.resetValue();
        inputFile.setValid(true);
    }
}

public void resetValue() {
    if (fileName != null)
        fileName = null;
    if (fileContent != null)
        fileContent = null;
    if (inputstream != null)
        inputstream = null;
}

public void setInputFile(RichInputFile inputFile) {
    this.inputFile = inputFile;
}

public RichInputFile getInputFile() {
    return inputFile;
}

public void setFile(UploadedFile file) {
    this.file = file;
}

public UploadedFile getFile() {
    return file;
}

public String getFileContent() {
    return fileContent;
}

public String getFileName() {
    return fileName;
}
}

Когда я выбираю файл в элементе загружаемого файла, файл выбирается, но ValueChangeEvent не вызывается, и onFileUploadValueChangeListener не вызывается. PPR происходит, а значение inputFile RichInputFile по-прежнему равно нулю, и на экране отображается сообщение «Файл не выбран». (привязка прошла успешно)

Что я должен исправить, чтобы событие valueChangeEvent срабатывало для af:inputFile?


person Cedric    schedule 16.03.2016    source источник


Ответы (2)


Я нашел ответ.

Чтобы событие af:inputFile valueChangeEvent сработало, оно обязательно должно быть окружено тегом af:form usesUpload="true" :

<af:panelGroupLayout id="pgl1" layout="horizontal">
 <af:form usesUpload="true" id="f1">
  <af:inputFile label="Upload File" id="if1"
                binding="#{viewScope.userBean.inputFile}"
                valueChangeListener="#{viewScope.userBean.onFileUploadValueChangeListener}"
                autoSubmit="true"/>
  <af:spacer width="10" height="10" id="s7"/>
  <af:commandButton text="Upload" id="cb1"
                    disabled="#{viewScope.userBean.inputFile.value == null ? true : false}"
                    partialTriggers="if1"
                    actionListener="#{viewScope.userBean.onUploadFile}"/>
  </af:form>
</af:panelGroupLayout>
person Cedric    schedule 16.03.2016
comment
если у нас есть форма над областью потока задач и useUpload=true, она также работает ?? - person Saeed Areffard; 26.05.2020

если у нас есть форма над областью потока задач и useUpload=true, она также работает??

Да.

Если у вас есть форма над областью потока задач, вы должны найти и добавить usesUpload="true" к этой форме. Он добавит в html: enctype="multipart/form-data", что позволит вам загрузить файл, и valueChangeListener будет захвачен.

person Łukasz Wasilewski    schedule 15.07.2021