LookupDispatchActionクラスの使用説明


org.apache.struts.actions.LookupDispatchActionカテゴリはDispatchActionカテゴリのサブクラスであり、DispatchActionと同様に、要求上のパラメータを介してどの方法を実行するかを決定するが、LookupDispatchActionはメッセージリソースファイルを照会する機能が多く、LookupDispatchActionの用途の一つは、1つのフォームに2つ以上のボタンが含まれている場合、メッセージ・リソース・ファイルをクエリーすることによって、対応するアクションを決定できます.
直接例として説明します.LookupDispatchActionを継承した後、getKeyMethodMap()メソッドを再定義し、次のような独自の処理方法を定義します.
  • EditAction.java
  • package onlyfun.caterpillar;
    
    import javax.servlet.http.*; 
    import org.apache.struts.action.*; 
    import org.apache.struts.actions.*;
    
    public class EditAction extends LookupDispatchAction { 
        protected Map getKeyMethodMap() { 
            Map map = new HashMap();
            map.put("button.save", "save");
            map.put("button.preview", "preview"); 
            map.put("button.reset", "reset"); 
            return map; 
        }
    
        public ActionForward save(ActionMapping mapping, 
                                  ActionForm form, 
                                  HttpServletRequest request, 
                                  HttpServletResponse response) 
                                     throws Exception { 
            // ...... 
        }
    
        public ActionForward preview(ActionMapping mapping, 
                                  ActionForm form, 
                                  HttpServletRequest request, 
                                  HttpServletResponse response) 
                                     throws Exception { 
            // ...... 
        }
    
        public ActionForward reset(ActionMapping mapping, 
                                  ActionForm form, 
                                  HttpServletRequest request, 
                                  HttpServletResponse response) 
                                     throws Exception { 
            // ...... 
        }                                                              
    }

    メッセージ・リソース・アーカイブには、次のメッセージが含まれているとします.
  • messages.properties
  • button.save=Save
    button.preview=Preview
    button.reset=Reset

    LookupDispatchActionを使用するにはstruts-config.xmlでは、要求パラメータに含まれる名前を定義します.
  • struts-config.xml
  • ...
       <action path="/edit"
               type="onlyfun.caterpillar.EditAction" 
               parameter="method" 
               name="editForm"/>
    ... 

    次に、フォームページに次の内容が含まれているとします.
    ...
    action="/strutsapp/edit.do">
    .....




    ...
    いずれかのボタンを押すと、要求パラメータにはmethod=Saveまたはmethod=Previewまたはmethod=Resetが含まれます.method=Saveと仮定すると、LookupDispatchActionはそれに基づいてvalueとしてメッセージ情報ファイルに対応するkeyを見つけ、keyとgetKeyMethodMap()に基づいて実行する方法がsave()メソッドであることがわかります.
    では、国際化されたメッセージ管理の部分については?例えばフォームボタンで中国語を使いたいですか?
    ...
    action="/strutsapp/edit.do">
    .....




    ...
    同様に、メッセージ・アーカイブには次の内容が含まれている必要があります.
  • messages.properties
  • button.save=  
    button.preview=  
    button.reset=  

    次に、native 2 asciiを使用して、メッセージ・アーカイブをUnicode符号化に変換します.たとえば、次のようにします.
    native2ascii messages_zh_TW.txt messages_zh_TW.properties
    次の質問は、ブラウザから送られてきた中国語のパラメータを正確に解析するためにrequestのsetCharacterEncoding(「Big 5」)を使用して、正しい中国語のパラメータを得ることができますが、どこでこの動作をしますか?サーブレットFilterでは、ActionFormのreset()メソッドで次のようなことができます.
    package onlyfun.caterpillar;
    public class UserForm extends ActionForm {
    ......
    public void reset(ActionMapping mapping,
    HttpServletRequest request) {
    try {
    request.setCharacterEncoding("Big5");
    .......
    }
    catch(Exception e) {
    ....
    }
    }
    }
    これであなたのボタンは中国語のメッセージを使うことができます.
    よろしければ、組み合わせてご利用いただけます
    <bean:message>は、上記の機能を使用して、メッセージファイル内のメッセージを直接ラベルによって管理する.