StrutsMemo003

BACK

LookupDispatchActionをボタンではなくリンク(html:link)で使用する

例えばページング機能を作成していて、 先頭へ、前へ、次へ、最後へ という4つのリンクを1つのアクションクラスで 実装する場合。

  • MessageResources.properties
    # -- 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=最後へ
    
    ボタンの場合と違い、文言として表示するようのリソースと、
    LookupDispatchActionにメソッドを見つけさせるためのリソースの
    2つを用意する。
  • JSP
    <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>
    
  • struts-config.xml
    ...
           <action
               path="/query"
               type="mokemoke.QueryAction"
               name="queryForm"
               scope="session"
               parameter="method">
                       <forward name="failure" path="Input"/>
                       <forward name="success" path="Result"/>
           </action>
    ...
    
  • 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

最終更新:2013年08月02日 16:56