首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 1.x 系列教程(19):LookupDispatchAction 處理多提交按鈕與國際化按鈕值

     編輯:Java 相關知識

前言

LookupDispatchAction 是 DispatchAction 子類,專為單一表單多提交按鈕且按鈕顯示文字需國際化的情境設計。它透過屬性檔鍵值映射到實際方法名,解決「按鈕顯示文字隨語系變動,但程式邏輯固定」的問題。

客戶端 JSP 表單

<html:form action="myaction">
    <html:submit property="action">
        <bean:message key="submit.print" />
    </html:submit>
    <html:submit property="action">
        <bean:message key="submit.save" />
    </html:submit>
</html:form>
  • 兩按鈕共用 property="action"(對應請求參數名)。
  • 按鈕顯示文字由 <bean:message> 從屬性檔取得(submit.print、submit.save)。
  • 提交時,瀏覽器送出 action=屬性檔對應值(如 action=save)。

Action 子類別實作

package action;
import org.apache.struts.actions.LookupDispatchAction;
import java.util.*;

public class MyLookupDispatchAction extends LookupDispatchAction {
    // 必須實作:建立「屬性檔鍵 → 方法名」映射
    protected Map getKeyMethodMap() {
        Map m = new HashMap();
        m.put("submit.print", "print");  // 屬性檔鍵 → 方法名
        m.put("submit.save", "save");
        return m;
    }

    public ActionForward print(ActionMapping mapping, ActionForm form,
                               HttpServletRequest request, HttpServletResponse response) {
        // 列印處理邏輯
        return null;
    }

    public ActionForward save(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request, HttpServletResponse response) {
        // 儲存處理邏輯
        return null;
    }
}

struts-config.xml 配置

<action path="/moresubmit"
        type="action.MyLookupDispatchAction"
        parameter="action" />
  • parameter="action":指定請求參數名(對應按鈕 property)。

運作流程

  1. 使用者點擊「儲存」按鈕(顯示文字來自 submit.save 屬性檔值,假設為 "Save")。
  2. 瀏覽器送出 /moresubmit.do?action=Save。
  3. 框架在 getKeyMethodMap() 映射表中尋找 key 為 "Save" 的項目 → 找到 submit.save 對應方法名 "save"。
  4. 呼叫 save() 方法處理。

優缺點分析

優點缺點
支援按鈕文字國際化需維護屬性檔與 getKeyMethodMap() 映射
邏輯方法名固定,不受顯示文字影響設定較繁瑣,Struts 1.2.9+ 建議改用 EventDispatchAction

總結

LookupDispatchAction 透過「屬性檔鍵 → 方法名」間接映射,優雅解決多語系按鈕值問題,但設定複雜度較高。若專案無國際化需求,EventDispatchAction 為更佳選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved