Source Taste: Struts 2:ModelDrivenInterceptor

来源:互联网 发布:mac队全灭动态图解 编辑:程序博客网 时间:2024/06/03 12:33

PART 1:

public class ModelDrivenInterceptor extends AbstractInterceptor {    protected boolean refreshModelBeforeResult = false;    public void setRefreshModelBeforeResult(boolean val) {        this.refreshModelBeforeResult = val;    }    //Derek: the signature is impressive and noteworthy, recursively invoked scenario    @Override    public String intercept(ActionInvocation invocation) throws Exception {        Object action = invocation.getAction();        if (action instanceof ModelDriven) {            ModelDriven modelDriven = (ModelDriven) action;            ValueStack stack = invocation.getStack();            Object model = modelDriven.getModel();            if (model !=  null) {                //Derek: Notice the exact simple behavior of ModelDriven                stack.push(model);            }            if (refreshModelBeforeResult) {                invocation.addPreResultListener(new RefreshModelBeforeResult(modelDriven, model));            }        }        //Derek: Notice the return clause, which enables recurrsive invoking.        return invocation.invoke();    }

THINK: Under the params-prepare-params pattern, the first time parametersInterceptor invoked must not apply the params to any model, since no model pushed into ValueStack at that moment.

INVESTIGATE: When does Struts 2 set values for the model's properties?

DELVE: the model object would be on the top of the stack? and would be matched with priority(given top-down retrieval)?


原创粉丝点击