7

Expression Language を使用して XPages コントロールを Java Bean にバインドする方法がわかりました。次に、セッターとゲッターに自動的にアクセスします。

しかし、添付ファイルをどのように処理しますか?

それはどのように見えますか?ファイルアップロードコントロールをBeanにバインドできるようにしたいと思います。添付ファイルを「何でも」ドキュメントに保存します...それが現在のドキュメントであろうと外部ドキュメントであろうと..Beanはそのロジックを処理できる必要があります。

その添付ファイルをインメモリ Bean に取得して、ドキュメントに保存するなどの操作を実行できるようにする方法がわかりません。

アドバイスをいただければ幸いです。

更新: これは、 xPages アップロード コントロールを使用して、アップロードされたファイルをローカル ファイル システムに保存する方法と同様の質問です。

しかし、その質問では、ユーザーはローカル ディスクに保存したいと考えています。ドキュメントに保存しようとしています。

ありがとう!

4

2 に答える 2

11

com.ibm.xsp.component.UIFileuploadEx.UploadedFileクラスを使用して、Bean にゲッターとセッターを作成する必要があります。

private UploadedFile uploadedFile;

public UploadedFile getFileUpload() {
    return uploadedFile;
}
public void setFileUpload( UploadedFile to ) {
    this.uploadedFile = to;
}

Bean データを処理する関数 (保存関数など) では、オブジェクトが null かどうかを確認することで、ファイルがアップロードされたかどうかを確認できます。null でない場合は、ファイルがアップロードされています。

アップロードされたファイルを処理するには、まずgetServerFile() メソッドを使用してcom.ibm.xsp.http.IUploadedFileオブジェクトのインスタンスを取得します。そのオブジェクトには、アップロードされたファイルの File オブジェクトを返す getServerFile() メソッドがあります。そのオブジェクトの問題は、暗号的な名前が付いていることです (おそらく、複数の人が同時に同じ名前のファイルをアップロードすることに対処するためです)。元のファイル名は、IUploadedFile クラスのgetClientFileName()メソッドを使用して取得できます。

次に、暗号化されたファイルの名前を元のファイル名に変更し、処理して (リッチ テキスト フィールドに埋め込むか、別の処理を行います)、元の (暗号化された) 名前に戻します。この最後の手順は、コードが終了した後にファイルがクリーンアップ (削除) されるため、重要です。

上記の手順のサンプル コードは次のとおりです。

import java.io.File;
import com.ibm.xsp.component.UIFileuploadEx.UploadedFile;
import com.ibm.xsp.http.IUploadedFile;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.RichTextItem;
import com.ibm.xsp.extlib.util.ExtLibUtil;  //only used here to get the current db

public void saveMyBean() {

  if (uploadedFile != null ) {

        //get the uploaded file
        IUploadedFile iUploadedFile = uploadedFile.getUploadedFile();

        //get the server file (with a cryptic filename)
        File serverFile = iUploadedFile.getServerFile();        

        //get the original filename
        String fileName = iUploadedFile.getClientFileName();    

        File correctedFile = new File( serverFile.getParentFile().getAbsolutePath() + File.separator + fileName );

        //rename the file to its original name
        boolean success = serverFile.renameTo(correctedFile);

        if (success) {
            //do whatever you want here with correctedFile

            //example of how to embed it in a document:
            Database dbCurrent = ExtLibUtil.getCurrentDatabase();
            Document doc = dbCurrent.createDocument();
            RichTextItem rtFiles = doc.createRichTextItem("files");
            rtFiles.embedObject(lotus.domino.EmbeddedObject.EMBED_ATTACHMENT, "", correctedFile.getAbsolutePath(), null);
            doc.save();

            rtFiles.recycle();
            doc.recycle();

            //if we're done: rename it back to the original filename, so it gets cleaned up by the server
            correctedFile.renameTo( iUploadedFile.getServerFile() );
        }


    }
 }
于 2013-06-12T20:10:27.817 に答える