2013-01-08 58 views
1

我想通過使用多個af:inputFile組件創建多個文件上傳。這裏是我的XHTML:ADF Faces多文件上傳

<?xml version='1.0' encoding='UTF-8'?> 
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" 
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> 
    <jsp:directive.page contentType="text/html;charset=UTF-8"/> 
    <f:view> 
    <af:document id="d1" title="Home"> 
     <af:form id="f1" usesUpload="true"> 
     <af:commandButton text="Add" immediate="true" 
          actionListener="#{viewScope.massUpload.add}" 
          id="cb2"/> 
     <af:panelGroupLayout layout="vertical" id="pgl1" partialTriggers="cb1"> 
      <af:iterator value="#{viewScope.massUpload.fileComponents}" var="fileComponent" 
         id="i1" varStatus="status"> 
      <af:inputFile binding="#{fileComponent}" id="if1" 
          value="#{viewScope.massUpload.files[status.index]}"/> 
      </af:iterator> 
      <af:commandButton text="Upload" 
          actionListener="#{viewScope.massUpload.upload}" 
          id="cb1"/> 
     </af:panelGroupLayout> 
     </af:form> 
    </af:document> 
    </f:view> 
</jsp:root> 

,這是管理的bean:

package com.edfx.massupload.bean; 

import java.util.ArrayList; 
import java.util.List; 

import javax.faces.event.ActionEvent; 

import oracle.adf.view.rich.component.rich.input.RichInputFile; 

import oracle.stellent.ridc.IdcClientException; 

import org.apache.myfaces.trinidad.model.UploadedFile; 


public class MassUploadBean { 
    private List<RichInputFile> fileComponents = new ArrayList<RichInputFile>(); 
    private List<UploadedFile> files = new ArrayList<UploadedFile>(); 

    public MassUploadBean() { 
     super();   
    } 

    public void add(ActionEvent event) { 
     fileComponents.add(new RichInputFile()); 
     files.add(null); 
    } 

    public void upload(ActionEvent event) throws IdcClientException { 
     for(UploadedFile file : files) { 
      System.out.println(file.getFilename()); 
     } 
    } 

    public void setFiles(List<UploadedFile> files) { 
     this.files = files; 
    } 

    public List<UploadedFile> getFiles() { 
     return files; 
    } 

    public void setFileComponents(List<RichInputFile> fileComponents) { 
     this.fileComponents = fileComponents; 
    } 

    public List<RichInputFile> getFileComponents() { 
     return fileComponents; 
    } 
} 

的問題,我面對的是:

  1. 我已經點擊添加按鈕;一個新的文件上傳組件添加到頁面;我瀏覽一個文件;再次點擊添加按鈕;添加另一個文件上傳組件,並提交第一個文件上傳(但它有一個邊框,或類似的東西);我從第二個文件上傳瀏覽文件;再次點擊添加按鈕;現在第一個文件上傳被清除(重置)並且第二個文件上傳被提交;
  2. 每當我點擊添加按鈕,文件就會上傳。爲什麼?如何抵制它?我曾嘗試設置atoSubmit =「false」,但沒有運氣。還試圖把迭代器,文件上傳器和上傳按鈕放在af中:subForm
  3. 我的要求是上傳文件時單擊上傳按鈕,而不是之前。

我做錯了什麼?任何指針都會非常有幫助。

+0

您是否看到:http://docs.oracle.com/html/E18745_01/devguide/fileUpload.html? –

+0

@DaveJarvis我看過文檔。爲什麼有差異?你指着'valueChangeListener'嗎?我無法使用'autoSubmit'屬性。 –

回答