public String intercept(ActionInvocation invocation) throws Exception {
//獲取 Action 對象: EmployeeAction 對象, 此時(shí)該 Action 已經(jīng)實(shí)現了 ModelDriven 接口
//public class EmployeeAction implements RequestAware, ModelDriven<Employee>
Object action = invocation.getAction();
//判斷 action 是否是 ModelDriven 的實(shí)例
if (action instanceof ModelDriven) {
//強制轉換為 ModelDriven 類(lèi)型
ModelDriven modelDriven = (ModelDriven) action;
//獲取值棧
ValueStack stack = invocation.getStack();
//調用 ModelDriven 接口的 getModel() 方法
//即調用 EmployeeAction 的 getModel() 方法
/*
public Employee getModel() {
employee = new Employee();
return employee;
}
*/
Object model = modelDriven.getModel();
if (model != null) {
//把 getModel() 方法的返回值壓入到值棧的棧頂. 實(shí)際壓入的是 EmployeeAction 的 employee 成員變量
stack.push(model);
}
if (refreshModelBeforeResult) {
invocation.addPreResultListener(new RefreshModelBeforeResult(modelDriven, model));
}
}
return invocation.invoke();
}