1

複数のaf:inputFileコンポーネントを使用して、複数のファイルのアップロードを作成しようとしています。これが私のxhtmlです:

<?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番目のファイルアップロードからファイルを参照します。もう一度[追加]ボタンをクリックします。これで、最初のファイルアップロードがクリア(リセット)され、2番目のファイルアップロードが送信されます。
  2. [追加]ボタンをクリックするたびに、ファイルがアップロードされます。なんで?それに抵抗する方法は?atoSubmit = "false"を設定してみましたが、うまくいきませんでした。また、af:subForm内にイテレータ、ファイルアップローダー、およびアップロードボタンを配置しようとしました
  3. 私の要件は、アップロードボタンがクリックされたときにファイルをアップロードすることです。

私は何か間違ったことをしていますか?任意のポインタが非常に役立ちます。

4

2 に答える 2

1

ADF の新しいバージョンは、一括アップロードに役立つはずです: http://jdevadf.oracle.com/adf-richclient-demo/docs/tagdoc/af_inputFile.html

displayMode と maximumFiles をオンにします (uploadType も参照)。

于 2013-08-20T18:21:35.180 に答える
1

UCM にアップロードしていることを示す IdcClientException を使用しているようです。WebCenterも使用している場合は、WebCenter Portalに付属するすぐに使用できるアップロード・タスク・フロー( http://docs.oracle.com/cd/E29597_01/webcenter.1111/e25595/jpsdg_content_jsfpg )を使用できる場合があります。 htm#autoId18

PS5 の時点で、そのタスク フローは複数ファイルのアップロードを行います。

于 2013-03-21T21:43:15.710 に答える