RichFaces 4 fileupload清除并清除所有按钮

时间:2012-03-30 00:16:56

标签: jsf file-upload richfaces clear

目前我有这个:

<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>

在支持bean上,我有一个上传文件的列表。当我点击Clear/Clear all按钮时,会触发事件clear,当用户点击doClearFilesList按钮时,方法Clear All(只清除上传的文件列表)就完美了,但如果用户点击Clear按钮它应该只删除与清除文件对应的列表中的项目。

如何从UploadBean.doClearFilesList方法中删除列表中的单个文件?应该是这样的:

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

有什么想法吗?

干杯

更新

RichFaces 4.1.0 Final JSF Mojarra 2.1.6 Tomcat 7

2 个答案:

答案 0 :(得分:2)

我不清楚您未能运行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;
  }
}

答案 1 :(得分:0)

将“onclear”属性添加到&lt; rich:fileUpload /&gt;组件并调用&lt; a4j:jsFunction /&gt;并将文件名传递给它,如下所示。

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

你的&lt; a4j:jsFunction /&gt;应该如下。

<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);}