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

Struts 2 實戰:單一表單多提交按鈕的優雅處理方案

     編輯:Java 相關知識

Web 表單常包含多個提交按鈕(如「保存」、「打印」、「刪除」),傳統 Struts 1.x 需用 LookupDispatchAction 或 EventDispatchAction 處理,配置繁瑣。Struts 2 提供極簡機制:通過 URL 參數 actionName!methodName.action 或表單按鈕的 method 屬性,直接映射到 Action 不同方法,無需額外配置。本文通過完整範例演示如何輕鬆實現。

核心原理

  • 表單提交時,按鈕的 name 與 method 屬性決定調用哪個 Action 方法。
  • 或直接訪問 submit!save.action、submit!print.action 指定方法。
  • Action 類必須提供對應的公共方法(非 execute)。

完整實戰範例

1. JSP 頁面 (more_submit.jsp)

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>多提交按鈕處理</title></head>
<body>
    <s:form action="submit.action">
        <s:textfield name="msg" label="輸入內容"/>
        <s:submit name="save" value="保存" method="save"/>
        <s:submit name="print" value="打印" method="print"/>
    </s:form>
</body>
</html>

兩個 <s:submit> 分別指定 method="save"、method="print"。

2. Action 類 (MoreSubmitAction.java)

package action;

import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;

public class MoreSubmitAction extends ActionSupport implements ServletRequestAware {
    private String msg;
    private HttpServletRequest request;

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    public String save() throws Exception {
        request.setAttribute("result", "成功保存[" + msg + "]");
        return "save";
    }

    public String print() throws Exception {
        request.setAttribute("result", "成功打印[" + msg + "]");
        return "print";
    }

    // getter/setter 省略
}

關鍵點:

  1. 必須實現 ServletRequestAware 獲取 HttpServletRequest(Struts 2 Action 方法無參數)。
  2. save()、print() 方法必須存在,否則拋出 NoSuchMethodException。

3. struts.xml 配置

<package name="demo" extends="struts-default">
    <action name="submit" class="action.MoreSubmitAction">
        <result name="save">/result.jsp</result>
        <result name="print">/result.jsp</result>
    </action>
</package>

結果名稱對應方法返回字串。

4. 結果頁 (result.jsp)

<%@ page pageEncoding="GBK"%>
<html><head><title>提交結果</title></head>
<body><h1>${result}</h1></body></html>

測試驗證

  • 訪問 https://localhost:8080/moresubmit/more_submit.jsp,點擊「保存」/「打印」觀察結果。
  • 直接調用:
    https://localhost:8080/moresubmit/submit!save.action
    https://localhost:8080/moresubmit/submit!print.action

對比 Struts 1.x 的優勢

特性Struts 1.xStruts 2
處理多提交需繼承 LookupDispatchAction/EventDispatchAction,配置映射零配置,直接方法映射
獲取 Requestexecute 方法參數直接提供實現 ServletRequestAware 接口
方法簽名固定 execute(...) 簽名任意公共方法,返回 String

總結

Struts 2 以約定優於配置的思想,將「一個表單多提交」這一常見需求簡化為:

  1. 按鈕加 method 屬性
  2. Action 加對應方法
  3. 配置對應 <result>

無需繼承特殊基類、無需屬性文件映射,代碼清爽、易維護。

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