Загрузите файл RichFaces 4, очистите и очистите все кнопки - PullRequest
1 голос
/ 30 марта 2012

Ну, в настоящее время у меня есть это:

<rich:fileUpload addLabel="Agregar" clearAllLabel="Quitar todos"
                 clearLabel="Quitar" deleteLabel="Quitar"
                 doneLabel="Completado" uploadLabel="Subir archivos"
                 fileUploadListener="#{uploadBean.doUpload}"
                 acceptedTypes="txt, csv"
                 noDuplicate="true">
    <a4j:ajax event="uploadcomplete" render="validationButton"/>
    <a4j:ajax event="clear" listener="#{uploadBean.doClearFilesList}"
              render="validationButton"/>
</rich:fileUpload>

На бине у меня есть список загруженных файлов. Когда я нажимаю кнопку Clear/Clear all, событие clear запускается, и метод doClearFilesList (который просто очищает список загруженных файлов) идеально подходит, когда пользователь нажимает кнопку Clear All, но если пользователь нажимает * Кнопка 1008 * Следует просто удалить элемент списка, соответствующий очищенному файлу.

Что я могу сделать в моем методе UploadBean.doClearFilesList, чтобы удалить один файл из списка? Должно быть что-то вроде:

public void doClearFilesList(){
    files.clear(); //when CLEAR ALL is clicked
    files.remove(oneFile); //when CLEAR is clicked
    validationButtonRendered = false;
}

Есть идеи?

Приветствия

UPDATE

RichFaces 4.1.0 Final JSF Mojarra 2.1.6 Tomcat 7

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Мне непонятно, в какой момент вы не смогли запустить пример, описанный в https://community.jboss.org/message/727544#727544

Однако я надеюсь, что следующее сработает для вас, что очень похоже на пример выше.

Страница:

<h:head>
<script>
  function clear(event) {
    var files = new Array();
    var data = event.rf.data;
    for (var i in data) {
      files[i] = data[i].name;
    }
    clearFunc(files);
  }
</script>
</h:head>
<body>
  <h:form>
    <rich:fileUpload onclear="clear(event);"/>
    <a4j:jsFunction name="clearFunc" action="#{del.clearFile}" ajaxSingle="true">
      <a4j:param name="fName" assignTo="#{del.fileNames}" />
    </a4j:jsFunction>
  </h:form>
</body>

Класс:

public class Del {
  String[] fileNames;
  public void clearFile() {
    for(String name : fileNames) {
      System.out.println(">>" + name);
      //Do file removing part here
    }
  }
  public String[] getFileNames() {
    return fileNames;
  }
  public void setFileNames(String[] fileNames) {
    this.fileNames = fileNames;
  }
}
0 голосов
/ 30 марта 2012

Добавьте атрибут «onclear» в свой компонент , вызовите и передайте ему имя файла, как показано ниже.

<rich:fileUpload onclear="clearFunc(event.memo.entry.fileName);" ..../>

Ваша должна быть такой, как показано ниже.

<a4j:jsFunction name="clearFunc" actionListener="#{uploadBean.clearFile}" ajaxSingle="true">
   <a4j:actionparam name="fName" />
</a4j:jsFunction>

Внутри метода слушателя вы можете получить доступ к имени файла, как показано ниже.

public void clearFile(ActionEvent event) {
  FacesContext context = FacesContext.getCurrentInstance();
  String fileName = context.getExternalContext().getRequestParameterMap().get("fName").toString();
  System.out.println("fileName = " + fileName);}
...