ActionForwardがnullの場合
ファイルをダウンロードさせるActionの場合、ストリームにデータを書き込んだ後にnullを返すが、その後の処理でActionForwardがnullの場合の処理がないため、S2StrutsContextUtil.setPathメソッドでNullPointerExceptionが発生する。結果的にはinputがダウンロード要求元ページであるため、画面遷移はせずファイルのダウンロードダイアログが表示されている(と思う)。
が、ファイルアップロード→ダウンロードというActionの場合、Actionのインタフェースでinputを設定している(次バージョンでは指定の必要なし)のにもかかわらず、単にNullPointerExceptionがブラウザに表示されてしまう。違いがよくわからない…
ファイルアップロード
RC2にバージョンアップしたら無事ファイルアップロードが出来るようになった。
で、ちょっと気になったのが、フォームがenctype="multipart/form-data"になっている場合、
〜内のタグの書き換え
なぜか書き換え後は、
の後に挿入される…BASEを書き換えたかっただけなので、属性の書き換えで対応Validation
StrutsActionアノテーションでinputを設定したら、エラーは出なくなった。しかし、せっかくdocRootをstruts-configで設定しているのに、inputにはフルパスで指定しないとMayaaでページが見つからないと怒られる。
試しに、inputをなくして
html:javascriptのformNameは何になるんだろ?
続ファイルアップロード
AcceptorImplのprocessにて、
ActionForm form = processor.processInputValueFormCreate(request, response, mapping);
の部分で一度ストリームからフォームの値を読み込むと、
processor.processPopulate(request, response, form, mapping);
の処理では既にストリームから値が読み込まれているためプロパティの値は読み込まれない。しかも、
form = processor.processActionForm(request, response, mapping);
ときちんと読み込まれている方のフォームはそのまま破棄されてしまっているので、マルチパートの場合はフォームにプロパティが設定されないように見える…この辺はざっと見ただけなので本当にそうなのかは不明。
※追記 MLでも報告アリ→次期リリースを待とう