例えばページング機能を作成していて、 先頭へ、前へ、次へ、最後へ という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