Actionとは独立に動的に遷移先を変更する…の続き

昨日の続き。
あの方法の場合、端末ごと、など条件ごとにファイルを分けるような使い方になるが、変更に対するトレースが重要になってくる(メンテしたけどPCの画面しか変わってないなんてことが起こる)ので、場合によって選ぶしかないのかな。ただ、デザイナと開発者をすっぱり分けていくようなシーンで、かつ返す画面も全然見てくれが違う(表示している内容(データ)はおおよそ同じだとして)場合にはいいかも。

一番大きな問題点っぽいのはあの方法では inputForwardの扱いが困難ということか。実はあんまり使ってない(普通は使うんだよね?)ので困ってないのだけど…ビューコンポーネントごと入れ替えるようなケースでは、forwardのname=やinputForwardにもそのビューの識別子が使える(ファイル名かもしれないしTilesの識別子かもしれない)ので、こっちのほうがその点ではスマート。

もっと平易にやる方法はないのか...?もうちょっと考えてみよう。実はもっと簡単な組み合わせと方法がある…はず


追記(21:00)
動的?な振り分け先をstruts-config.xmlで管理せずに、たとえばファイル名に固有のサフィクスを付けて、そのファイルの存在を仮定できる場合、

  • RequestProcessor#processForwardConfig(request,response,forward)
  • RequestProcessor#doForward(uri,request,response)

のいずれかを拡張する方法でも実現可能です。ただ、この場合管理が難しい*1のが難点。ただインスタンス作成コストが低くなる...か? 微妙(Stringこねくり回したりはするから)。長所はinputForwardにも対応できそうな点。

*1:forwardに書いてWrapperで云々みたいな方法だと少なくともstruts-config.xmlには生のファイル名/識別子が出ますから、それと比較しての話