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

Struts2 Action 參數接收三種方式與表單驗證實戰指南

     編輯:Java 相關知識

前言

在 Struts2 開發中,Action 接收前端傳遞的參數是核心基礎。本文將系統講解三種主流的參數接收形式,並示範如何利用 addFieldError() 實現簡單的表單驗證,幫助你快速掌握實戰技巧。

方式一:在 Action 中直接定義屬性(基本類型注入)

最直觀的方式是在 Action 類中聲明與表單字段同名的私有屬性,並提供 Getter/Setter。Struts2 會自動將請求參數注入這些屬性。

/** 
 * 基本參數接收示例
 * 請求範例:https://localhost:8080/Struts3/index!login?name=123&password=456
 */
@SuppressWarnings("serial")
public class User extends ActionSupport {
    private String name;
    private int pwd;

    // Getter/Setter 省略

    public String login() {
        System.out.println("name=" + name + " Pwd=" + pwd);
        if (123456 == pwd) {
            return SUCCESS;
        } else {
            return ERROR;
        }
    }
}

優點:簡單直接,適合少量參數。缺點:屬性過多時類會膨脹,難以維護。

方式二:使用 Domain Model(領域模型)封裝參數

將相關參數封裝成一個獨立的 JavaBean(如 User),Action 中只需持有該對象的引用。請求參數需以 user.name、user.password 形式傳遞。

// 實體類
public class User {
    private String name;
    private String password;
    // Getter/Setter 省略
}

// Action 類
/** 
 * Domain Model 模式
 * 請求範例:https://localhost:8080/Struts4/index!login?user.name=123&user.password=456
 */
@SuppressWarnings("serial")
public class UserAction extends ActionSupport {
    private User user;
    // Getter/Setter 省略

    public String login() {
        System.out.println("name=" + user.getName() + " Pwd=" + user.getPassword());
        return SUCCESS;
    }
}

優點:結構清晰,符合面向對象設計,便於複雜表單處理。

方式三:實現 ModelDriven<T> 接口(模型驅動)

Action 實現 ModelDriven<User> 並實例化模型對象。此時請求參數可直接用 name、password 傳遞,框架自動將數據填充到模型對象中。

/** 
 * Model Driven 模式
 * 請求範例:https://localhost:8080/Struts5/index!login?name=123&password=456
 */
@SuppressWarnings("serial")
public class UserAction extends ActionSupport implements ModelDriven<User> {
    private User user = new User();

    public String login() {
        System.out.println("name=" + user.getName() + " Pwd=" + user.getPassword());
        return SUCCESS;
    }

    @Override
    public User getModel() {
        return user;
    }
}

優點:結合了前兩者優點,參數名簡潔,又保持領域模型結構。注意:getModel() 返回的對象不能為 null,否則會拋出空指針異常。

簡單表單驗證:使用 addFieldError()

Struts2 提供 addFieldError(String fieldName, String errorMessage) 將錯誤信息綁定到指定字段,配合 JSP 標簽 <s:fielderror> 顯示。

@SuppressWarnings("serial")
public class InputErrorFilter extends ActionSupport {
    private String name;
    // Getter/Setter 省略

    public String login() {
        System.out.println(name);
        if (name != null && name.equals("hpu")) {
            return SUCCESS;
        } else {
            this.addFieldError("nameError", "用戶名輸入有誤");
            this.addFieldError("nameError", "ul li 形式輸出錯誤信息");
            return ERROR;
        }
    }
}

錯誤頁面 error.jsp 示例

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<body>
操作失敗 <br>
輸入參數:<s:text name="name" /><br/>
<s:fielderror fieldName="nameError" theme="simple"/><br/>
<s:property value="errors.nameError[0]"/><br/>
<s:debug></s:debug>
</body>
</html>

說明:theme="simple" 會以簡單的 ul/li 列表輸出所有錯誤信息;也可用 <s:property> 取特定索引的錯誤。

總結

  • 基本屬性注入:適合極簡場景,零配置。
  • Domain Model:適合中大型表單,結構清晰,參數名帶前綴。
  • ModelDriven:參數名最簡潔,適合 REST 風格 URL,需注意模型對象初始化。

表單驗證只需在 Action 中調用 addFieldError,配合前端標簽即可實現友好的錯誤提示。實際項目中建議結合 Struts2 的驗證框架(XML 或註解驗證)實現更複雜的業務規則。

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