実行メソッドのindexメソッドは必ず必要?
SAStrutsに限った話ではないですが、WEB-INF/web.xmlに以下のように404エラーのエラーページ設定を入れておけば、存在しないURLへアクセスすると指定したエラーページへ遷移させることが出来ます。
<error-page> <error-code>404</error-code> <location>/WEB-INF/view/error/404NotFound.jsp</location> </error-page>
色々なURLを打って動作確認していたら、たまに真っ白いだけの画面になるので何でだろうと思い調べてみると、indexメソッドを用意していないActionで起こる模様。
indexメソッドなしのHogeActionの場合、indexメソッドにマッピングされる/hogeというURLにアクセスすると真っ白画面になる。
とりあえずの回避策として以下のようにindexメソッドを作って、HttpServletResponseで404エラーを送ることでちゃんとエラーページが表示されました。
public class HogeAction { @Resource protected HttpServletResponse response; @Execute(validator = false) public String index() throws IOException{ response.sendError(HttpServletResponse.SC_NOT_FOUND); return null; } @Execute(validator = false) public String hoge(){ return "hoge.jsp"; } }
これ以外にもindexメソッドで存在しないjsp名をreturnしても404エラーとなることが確認できました。
いずれにせよ必要の無いindexメソッドを用意する必要があるのがイマイチなので、フレームワーク側で対応してもらえるとありがたいですね。
もしかしてindexメソッドを必要としないActionを作る自分がおかしい??