Java技術專區--Hilly

          http://blog.duyouyou.com
             :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理

          LookupDispatchAction使用示例(中文)(轉)

          Posted on 2006-07-20 18:04 duyouyou.com 閱讀(3101) 評論(0)  編輯  收藏 所屬分類: web技術
          org.apache.struts.actions.LookupDispatchAction類別是 DispatchAction 類別的子類,與DispatchAction類似的是,它透過請求上的參數來決定該執行哪一個方法,不過LookupDispatchAction多了查 詢訊息資源檔案的功能,LookupDispatchAction的用處之一,就是當一個表單中包括兩個以上的按鈕時,可以透過查詢訊息資源檔來確定相對 應的動作。

          直接以實例來說明,在繼承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"/>
          ...

          現在假設您的表單頁面包括以下的內容:
          ...
          ?<form name="editForm" method="post"
          ?????? action="/strutsapp/edit.do">
          ??? .....
          ??? <input type="submit" name="method" value="Save"/>
          ??? <input type="submit" name="method" value="Preview"/>
          ??? <input type="submit" name="method" value="Reset"/>
          ?</form>
          ...

          當您按下任一個按鈕時,請求參數中會包括method=Save或是method=Preview或是method= Reset,假設是method=Save好了,LookupDispatchAction會根據它作為value,在訊息資訊檔找到對應的key,然後 根據key與getKeyMethodMap()得知要執行的方法為save()方法。

          那么關於國際化訊息管理的部份呢?例如想要在表單按鈕上使用中文?
          ?...
          ?<form name="editForm" method="post"
          ?????? action="/strutsapp/edit.do">
          ??? .....
          ??? <input type="submit" name="method" value="存檔"/>
          ??? <input type="submit" name="method" value="預覽"/>
          ??? <input type="submit" name="method" value="重設"/>
          ?</form>
          ...

          一樣的,您的訊息檔案中必須包括下面的內容:
          • messages.properties
          button.save=存檔
          button.preview=預覽
          button.reset=重設

          然後,您要使用native2ascii將訊息檔案轉換為Unicode編碼,例如:
          native2ascii messages_zh_TW.txt messages_zh_TW.properties

          接下來的問題是,瀏覽器發送過來的中文參數,為了要能正確的解析,要使用request的 setCharacterEncoding("Big5"),這樣才能得到正確的中文參數,但是在什么地方作這個動作?您可以在Servlet 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> 來使用上述的功能,直接由標簽來管理訊息檔案中的訊息。

          Hold住
          主站蜘蛛池模板: 大石桥市| 金山区| 东兰县| 龙州县| 诏安县| 安阳市| 马山县| 邹平县| 安义县| 阿巴嘎旗| 平罗县| 晴隆县| 枞阳县| 浮山县| 达孜县| 建水县| 台前县| 蓝田县| 安远县| 蒙自县| 大新县| 合阳县| 崇明县| 丰城市| 武隆县| 渭源县| 正镶白旗| 雷山县| 奎屯市| 灵武市| 乌鲁木齐市| 阿尔山市| 宣化县| 高邮市| 池州市| 乌拉特后旗| 开鲁县| 香港| 油尖旺区| 金昌市| 宁德市|