struts2 18拦截器详解(九)
ScopedModelDrivenInterceptor
该拦截器处于defaultStack第八的位置,其主要功能是从指定的作用域内检索相应的model设置到Action中,该类中有三个相关的属性:
scope:从哪里获取model,有两个值,一是request,二是session,默认值为request
name:在scope中检索model的key
className:model类的名称,也就是该model是什么类型
虽然这三个参数都可以进行设置,但是在defaultStack中struts2并没有为其赋值,所以初始值这三个属性都为null。
下面是ScopedModelDrivenInterceptor的intercept方法源码:
protected Object resolveModel(ObjectFactory factory, ActionContext actionContext, String modelClassName, String modelScope, String modelName) throws Exception { Object model = null; Map<String, Object> scopeMap = actionContext.getContextMap();//获取ActionContext内容的context Map对象 if ("session".equals(modelScope)) {//如果配置了scope为session,但这里并没有配置 scopeMap = actionContext.getSession();//所以这里不会执行 } model = scopeMap.get(modelName);//去context Map(即相当于request作用域)中查找 if (model == null) {//没有找到 model = factory.buildBean(modelClassName, null);//调用对象工厂的buildBean方法实例化一个对象 scopeMap.put(modelName, model);//放置到context Map中 } return model;//返回model对象}