前端 60 欄位表單提交到 Action,逐個 setXxx 極其繁瑣。WebWork (Struts 2 前身) 提供 模型驅動 與 參數攔截器 自動映射:
public class MyAction extends ActionSupport implements ModelDriven<MyForm> {
private MyForm form = new MyForm();
@Override public MyForm getModel() { return form; }
// execute() 直接用 form.getXxx()
}
前端表單欄位名與 MyForm 屬性名一致 (如 name="userName"),框架自動調用 form.setUserName(value)。
public class MyAction extends ActionSupport {
private String field1, field2, ... field60; // 60 個屬性 + getter/setter
// 框架自動注入同名參數
}
private Map<String, Object> params = new HashMap<>();
public Map<String, Object> getParams() { return params; }
// 前端 name="params['field1']" 等,自動填入 Map
// 表單提交時自動序列化為 key=value&key2=value2
form.submit({
url: 'myAction.action',
method: 'POST',
// ExtJS 會自動將所有 field name 作為參數提交
});
ParametersInterceptor 遍歷 request.getParameterMap(),對 Action (或 Model) 尋找同名 setXxx 方法,透過反射調用並自動類型轉換 (OGNL)。
public setter。name="list[0].name"。user.name, address.city),對應 Action 中 User user; Address address; 結構。