Strutsを使用した開発でハマった事例と解決方法のメモです。
Strutsトラブル事例
・ブラウザの画面が真っ白になる
struts-config.xmlのaction指定内のforward先の文字列が間違っている。
若しくは、Actionが返すforward先の文字列がstruts-config.xml内に定義していない。
・struts-config.xmlのglobal-exceptionsに指定したエラー画面に遷移しなくなる
global-exceptions内で指定しているパラメータが間違っている
(メッセージのキーを変更したなど)
・表示した画面が途中までしか表示されない
表示が切れている付近のjspコードに誤りがある。
(ロジックの間違い、指定したメッセージキーが定義されていない等)
こうなった場合は画面上で右クリック→ソースの表示をしてソースが切れている箇所を確認してその付近のjspソースに誤りがないかを確認する。
・BeanUtilPopulateが発生する
List表示する時に用意しておかなければならない引数にリスト番号を渡してList内のデータオブジェクトを返すFormメソッドを作成していない。
・Action内でFormにセットした値がJSP側で表示されない
struts-config.xml内でscopeが適切に設定されていない。
・JSPの変更が反映されない
Tomcatが停止している時にJSPを修正しても、修正されたことがTomcatに伝わらないためJSPのリコンパイルが走らないため。
Tomcatが起動されている状態でJSPファイルの更新日付が更新されるような修正(再保存)等をすればリコンパイルが走る。
・java.lang.IllegalArgumentException: Resources cannot be null.が発生する
struts-config.xmlのactionタグ内のパラメータにvalidate="false"を指定していないかつ、
対象のactionタグに対応するFormクラスのバリデータ定義をvalidate.xmlに定義していない場合に発生します。
(struts標準のvalidate機能を使用しない場合は、必ず「validate="false"」をactionタグに定義しておく必要があります)
・strutsタグ内に「<%=xxxx >」という記述を書いても、値に置き換わってくれない
例えば、onclick="doSubmit('<%=xxxx >')" という風にonclickが発生した時、引数の値を動的に変えつつdoSubmitファンクションを呼び出す
という場合は、このような書き方ですとNGです。
この場合は、onclick="<%= "doSubmit('" + xxx + "')" %>" という風に書かないとうまく解釈してくれません。
備考
- 原因や解決方法は一例です。