表單提交時,<input type="hidden" name="code1" id="hiddeninput"> 經 JS 修改 value,但後台 request.getParameter("code1") 取不到值,其他字段正常。
Struts2 / Servlet 接收參數靠 name 屬性,而非 id。
document.getElementById("hiddeninput") 找到元素並修改 .value ✅code1=123 (用 name) ✅private String code1; + getCode1()/setCode1() ✅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>
name="code1" → 參數 code1=123ParamsInterceptor 調用 setCode1("123")this.code1 已經是 "123"// 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,Struts2 自動裝配列表 |
複選框 name="ids" 像 ids=1&ids=2 | Action 用 String[] ids 或 List |
核心原則:表單 name = Action 屬性名,Struts2 自動完成參數綁定,不用手動取 request 參數。