困ったこと
ファイル選択の際、ConversationScopedのPart型の変数に選択したファイルが入るようにして、
そのままcsvファイルの中の文字を取り出して一覧を表示するところまでは分かるが、
また別の画面に遷移したタイミングでファイルアップロードをしようと思って、
Part型の変数に格納されているデータを使ってアップロード処理をしようとしても、なぜか出来ない。ConversationScopedでも保持されているはずだが、とりあえずセッションのバッキングビーンのセッターに入れておいて、取り出そうとしてもInputStreamが使えない。
原因
ファイルの入出力はそのときの接続でしか有効ではないので、次の画面に遷移した時点でもう接続は切れていて、関係のないものになってしまう。
なので、たとえセッションのセッターにPart型のものをそのまま入れたとしても、意味が無い。
解決方法
2通りあります。
①tmpフォルダのようなものを作って、最初の段階でこっそりアップロードしておく。
そして、もしバリデーションやその他チェック処理があったとしたらそれを処理して、問題がないようであれば、tmpフォルダから本来のアップロード先へファイルを移動
②最初に読み込みがうまくいってるので、その読み込んだデータをListなどの変数に入れておいて、問題の次の画面に遷移するタイミングで、Listからデータを取り出して新規ファイルを作成しアップロードしたことにする。