tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:『apex:inputFile』と複数VFページで同一コントローラ

Visualforceには、2つのVFページで同一のコントローラを使用して変数の値を引き継ぐ使い方ができます。


入力ページ→確認ページというような順番に操作していく画面を開発したいときなどに利用できると思います。この同一コントローラを使った方法ですが、『apex:inputFile』タグを使う場合に注意する必要があります。


例えば次のファイルをアップロードしようとします。1MBぐらいなのでアップロード制限にかかるような大きさではありません。
f:id:tyoshikawa1106:20160126004718p:plain:w300


これを『apex:inputFile』タグでBlob変数に保持したあと、次ページに移動しようとするとビューステートエラーが発生してしまいます。
f:id:tyoshikawa1106:20160126004942p:plain


このように『apex:inputFile』をつかったファイル情報を別ページに保持するのはできないと思われます。『apex:inputFile』タグが必要な場合は1つのページで完結するような作りにした方が良さそうです。


別の回避方法としてはJavaScriptベースで開発して、Apexクラス変数に値をセットせずに実装する方法があると思います。

サンプルコード

ビューステートエラーにならないように処理する方法のサンプルです。