Develop with pleasure!

福岡でCloudとかBlockchainとか。

リクエストパラメータによる実行Actionの変更。

Struts2のActionMapperは送られてきたHTTPリクエストからStruts2の実行Actionをマッピングするクラス。(ActionMapper自体はインターフェース)

デフォルトでは、
org.apache.struts2.dispatcher.mapper.DefaultActionMapper
が使用される。変更したい場合は、struts.xml

<constant name="struts.mapper.class" value="変更したいActionMapperクラス"/>

を指定する。

このDefaultActionMapperのgetMapping()メソッドでリクエストに対して実行されるActionの情報を保持する、ActionMappingオブジェクトが生成される。

この時、リクエストのパラメータにaction:xxxという風に「action:」という名前で始まるパラメータが存在すると、そのパラメータのactoin:以下の部分=xxxを適用するActionのnameとして書き換える。

そのため、通常であれば、http://xxxx/hoge.actionというURLであればHogeActionが呼び出されるが、リクエストパラメータにaction:testという名前のパラメータが存在する場合、URLがhttp://xxxx/hoge.actionであっても呼び出されるのは、TestActionになる。

View側のStruts2のタグも

<@s.submit value="login" action="test"/>

といった形でaction属性で実行するActionをFormタグとは別に定義できる。ちなみに生成されるHTMLは

<input type="submit" value="login"  name="action:login"/>

ボタンによって処理を変えたい場合、JavaScriptでFormのaction属性を書き変える必要も無いので、特に携帯サイトを作る際とか便利そう。