ActionForwardがnullの場合

ファイルをダウンロードさせるActionの場合、ストリームにデータを書き込んだ後にnullを返すが、その後の処理でActionForwardがnullの場合の処理がないため、S2StrutsContextUtil.setPathメソッドでNullPointerExceptionが発生する。結果的にはinputがダウンロード要求元ページであるため、画面遷移はせずファイルのダウンロードダイアログが表示されている(と思う)。

が、ファイルアップロード→ダウンロードというActionの場合、Actionのインタフェースでinputを設定している(次バージョンでは指定の必要なし)のにもかかわらず、単にNullPointerExceptionがブラウザに表示されてしまう。違いがよくわからない…

ファイルアップロード

RC2にバージョンアップしたら無事ファイルアップロードが出来るようになった。

で、ちょっと気になったのが、フォームがenctype="multipart/form-data"になっている場合、機能していない。Actionアノテーションでinputを指定すればいいのだが、せっかくの無設定が活かせない。他のページではの指定だけできちんと元のページに遷移しているだけになんだか嬉しくない。違いはenctypeを指定しているかどうかなのでこれが原因のように思われる(詳細に調べたわけではないので自信なし)。

Bindingアノテーション(v2.3.2)

ドキュメントにあるように、

@Binding("aaa2")
public void setAaa(String aaa) {
    ...
}

てな感じで文字列を指定したが、コンポーネント名と解釈されて”aaa2”というコンポーネントが見つからないというエラーになってしまう。また、Uriを指定したらこれもOgnlで解析されて、:は駄目よ、とエラーになってしまう。単に文字列として扱ってもらうにはなにか他に指定しなければいけないのだろうか…

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でも報告アリ→次期リリースを待とう