例えばページング機能を作成していて、 先頭へ、前へ、次へ、最後へ という4つのリンクを1つのアクションクラスで 実装する場合。
# -- links -- link.first=first link.last=last link.prev=prev link.next=next # -- link labels -- link.label.first=先頭へ link.label.prev=前へ link.label.next=次へ link.label.last=最後へボタンの場合と違い、文言として表示するようのリソースと、
<html:link action="/query?method=first"><bean:message key="link.label.first"/></html:link> <html:link action="/query?method=prev"><bean:message key="link.label.prev"/></html:link> <html:link action="/query?method=next"><bean:message key="link.label.next"/></html:link> <html:link action="/query?method=last"><bean:message key="link.label.last"/></html:link>
...
<action
path="/query"
type="mokemoke.QueryAction"
name="queryForm"
scope="session"
parameter="method">
<forward name="failure" path="Input"/>
<forward name="success" path="Result"/>
</action>
...
...
@Override
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("link.prev", "prev");
map.put("link.next", "next");
map.put("link.first", "first");
map.put("link.last", "last");
return map;
}
...
こんな感じにすれば、パラメータ「method」には「prev」などの文言が入るので、
LookupDispatchActionはメッセージリソースから「prev」に対応するキー、「link.prev」を見つけ出し、
さらにそのキーを基にキーメソッドマップから「prev」を見つけ出すことになるので、
実行すべきメソッドは「prev」であると決定される。
しかしこうして細かくみると、Strutsってホントこういう無駄が多いね。
本当は単に「prev」って書いてあったら「prevメソッド」を実行する、みたいな作りでいいわけだ。
だから、SAStrutsやTeedaはそんな感じで作られているね。
もっともLookupDispatchActionじゃなくてEventDispatchActionを使えば
こういう面倒は起こらないか。
【参考サイト】
■LookupDispatchAction + html:link - izu@SAN FRANCISCO
http://d.hatena.ne.jp/nadi/20031219/p3