- PR -

StrutsでActionをchainした場合にActionFormに含まれるFormFileがNullになるのは正常なのか?

1
投稿者投稿内容
YB
会議室デビュー日: 2005/11/25
投稿数: 16
投稿日時: 2006-01-13 13:12
いつもお世話になっております。標記で悩んでおります。

enctype="multipart/form-data"でformデータを渡すjspから
・AaaActionではファイルの保存
・BbbActionではファイルの編集
・CccActionでは表示データの作成

と言うような構成で順次Actionをチェインする場合、ActionFormに格納されたデータは各Actionで呼ばれる都度初期化・再アタッチ(と表現して良いのか不明ですが)されますが、String等についてはそのまま保持されているにも関わらず、FormFileについてはNullになってしまいます。

上記のような構成だと一旦ローカルに保存したファイルを再度読み込めば問題はないのですが、仮にAaaActionの前に別のActionが存在する場合、AaaAction以降でファイルを取り出し操作したい場合、一旦requestにsetAttributeする等して授受しなければなりません。その場合でもActionForm自身をsetAttributeしてもFormFileはNullになってしまうので、私はxxxForm.getUpFile()したものをsetAttributerするようにしています。

このようにActionをチェインした場合、ActionFormに含まれるFormFileがNullになると言うのは正常な動作なのでしょうか?(何もしないActionを間に挟んでみても同様にNullになります。)その場合、ActionFormに含まれるFormFileをNullにせずに引き回す方法ってあるでしょうか?(手を抜くな!と言う声が聞こえてきそうですが...)

これらに関して情報をお持ちの方、もしくは参考になるサイトをご存じの方がおられましたら教示いただけませんでしょうか。よろしくお願いします。

YB
会議室デビュー日: 2005/11/25
投稿数: 16
投稿日時: 2006-01-13 14:59
YBです。ウソ言ってますね。(^^;

>>私はxxxForm.getUpFile()したものをsetAttributerするようにしています。

Nullにはなりませんが、ファイルとしては取得できないようですね。
上記は無視してください。


ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2006-01-16 09:12
Struts は multipart 対応のために HttpServletRequest をラッピングします。
ActionForm にリクエストパラメータを格納する(populate)時に、アップロードファイル
(のデータ)はストリームからすべて読み込んでしまいます。
そのため、チェインした後に取り出そうとしても取り出せません。(読込済みなので)
私は、最初のアクションで使うか、setAttribute しています。
詳しくは org.apache.struts.upload パッケージ等を参照してください。
YB
会議室デビュー日: 2005/11/25
投稿数: 16
投稿日時: 2006-01-16 11:43
ふーばー様

返信ありがとうございます。

初回のpopulate時に全て読み込んでしまうのですか。となると、ふーばー様同様に最初のアクションで使うか、setAttributeするのが一番簡単と言うことになりそうですね。

再度org.apache.struts.upload パッケージ等を調べてみることにいたします。どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)