inputFileおよびファイル・アップロードについて

JSFページでのファイル・アップロードのサポートを提供するには、ADF FacesのinputFileコンポーネント(oracle.adf.view.faces.component.UIXInput)を使用します。このinputFileコンポーネントは、af:formまたはh:formコンポーネント内で使用できます。いずれの場合も、ファイルのアップロードをサポートするには、エンクロージング・フォームを設定する必要があります。

<af:form usesUpload="true"/>    
<h:form enctype="multipart/form-data"/>    

すべての入力コンポーネントと同様に、inputFileコンポーネントはValueChangeEventを起動できます。ファイルのアップロードを処理するには、バッキングBeanに値の変更リスナー・メソッドを実装してイベントを処理するか、inputFileコンポーネントの値をマネージドBeanに直接バインドできます。

ファイルがアップロード(および適切なValueChangeEventが配信)されると、inputFileコンポーネントのvalue属性がoracle.adf.view.faces.model.UploadedFileのインスタンスに設定されます。コンポーネントのvalueoracle.adf.view.faces.model.UploadedFileタイプのマネージドBeanプロパティにバインドされている場合は、ADF Facesによって、該当するモデルにUploadedFileオブジェクトが設定されます。

値の変更リスナー・メソッド・バインディングの使用例:

<af:form usesUpload="true">
  <af:inputFile label="Upload:"
                valueChangeListener="#{MyBackingbean.fileUploaded}"/>
  <af:commandButton text="Begin"/>
</af:form>    

値の変更イベント・ハンドラ:

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import oracle.adf.view.faces.model.UploadedFile;

public class MyBackingbean
{
  ...
  public void fileUploaded(ValueChangeEvent event)
  {
    UploadedFile file = (UploadedFile) event.getNewValue();
    if (file != null)
    {
      FacesContext context = FacesContext.getCurrentInstance();
      FacesMessage message = new FacesMessage( "Successfully uploaded file " + file.getFilename() + " (" + file.getLength() + " bytes)");
      context.addMessage(event.getComponent().getClientId(context), message);
      // Here's where we could call file.getInputStream()
    } 
  }
}    

値バインディングの使用例:

<af:form usesUpload="true">
  <af:inputFile label="Upload:" 
                value="#{MyManagedbean.file}"/>
  <af:commandButton text="Begin" 
                    action="#{MyManagedbean.doUpload}"/>
</af:form>    

マネージドBeanメソッド:

import oracle.adf.view.faces.model.UploadedFile;

public class MyManagedbean
{
  public UploadedFile getFile()
  {
    return _file;
  }

  public void setFile(UploadedFile file)
  {
    _file = file;
  }

  public String doUpload()
  {
    UploadedFile file = getFile();
    // ... and process it in some way
  }

  private UploadedFile _file;
}    

注意: バッキングBeanメソッドまたはマネージドBeanメソッドでは、UploadedFile APIを使用してファイルのコンテンツを処理します。UploadedFileメソッドの詳細は、ADF Facesの各Javadocを参照してください。


ADF Faces入力コンポーネントでのラベルおよびメッセージ表示のサポートについて
ADF Facesのファイル・アップロード・サーブレット・コンテキスト初期化パラメータの構成
inputおよびselectInputフィールドの作成