首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP/Struts2 隱藏域值提交失敗:name 屬性與 Action 屬性不匹配

     編輯:程式設計綜合問答

表單提交時,<input type="hidden" name="code1" id="hiddeninput"> 經 JS 修改 value,但後台 request.getParameter("code1") 取不到值,其他字段正常。

根本原因

Struts2 / Servlet 接收參數靠 name 屬性,而非 id。

  • JS 用 document.getElementById("hiddeninput") 找到元素並修改 .value ✅
  • 瀏覽器提交表單時發送 code1=123 (用 name) ✅
  • 後台 Action 有 private String code1; + getCode1()/setCode1() ✅
  • 但開發者在 Action 里用 request.getParameter("hiddeninput") (用 id) 取值 ❌

修復驗證

// Action 類
private String code1; // 對應 name="code1"
public String getCode1() { return code1; }
public void setCode1(String code1) { this.code1 = code1; }

// JSP
<input type="hidden" name="code1" id="hiddeninput" value="">
<input type="submit" onclick="return submitcheck()">

<script>
function submitcheck() {
    document.getElementById("hiddeninput").value = "123"; // 正確
    return true;
}
</script>

Struts2 自動裝配機制

  • 表單 name="code1" → 參數 code1=123
  • Struts2 攔截器 ParamsInterceptor 調用 setCode1("123")
  • Action 執行時 this.code1 已經是 "123"
  • 無需手動 request.getParameter(),直接用屬性

調試技巧

// 1. 查看網絡面板:Form Data 是否有 code1=123
// 2. Action 添加日志
public String execute() {
    System.out.println("code1 = " + code1); // 應輸出 123
    return SUCCESS;
}

// 3. 若用 ModelDriven
public class MyAction extends ActionSupport implements ModelDriven {
    private MyModel model = new MyModel();
    public MyModel getModel() { return model; }
    // 表單 name="code1" → model.setCode1(),需確保模型有 code1 屬性
}

常見同類錯誤

錯誤正確
name="user.name" 但 Action 無 User user 屬性Action 添加 private User user; 及 getter/setter
多個同名 name="item.id" 列表提交Action 用 List items,Struts2 自動裝配列表
複選框 name="ids" 像 ids=1&ids=2Action 用 String[] ids 或 List ids

核心原則:表單 name = Action 屬性名,Struts2 自動完成參數綁定,不用手動取 request 參數。

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