Params拦截器把表单字段映射到ValueStack的对象属性
prepare拦截器先于modelDriven拦截器使用,为modelDriven拦截器准备对象
modelDriven拦截器,将把ModelDriven的getModel()方法返回的对象置于栈顶
paramsPrepareParamsStack拦截器栈,这个stack的拦截器调用的顺序为:首先params,然后prepare,接下来modelDriven,最后再params。
详解prepare拦截器:
Action类首先实现Preparable接口
在getModel()之前,先顺序查找执行对应方法[MethodName]的 prepare[ActionMethodName] 和prepareDo[ActionMethodName]
(默认先查找prepare[ActionMethodName]方法,也可设置参数先查找prepareDo[ActionMethodName])
默认情况下,prepare拦截器会执行Preparable 默认实现方法prepare() ,设置参数alwaysInvokePrepare=false ,struts.xml具体配置如下
<interceptor-ref name="paramsPrepareParamsStack">
<param name="prepare.alwaysInvokePrepare">false</param>
</interceptor-ref>
例:调用Action类的save()方法,则定义prepareSave()方法,为该实例准备模型驱动,如下:Action类 主要代码示例:
private Department department;
@Override
// 该默认实现,经过struts.xml配置 不再自动执行
public void prepare() throws Exception {
System.out.println("prepare....");
}
@Override
public Department getModel() {
return department;
}
// 添加部门的执行方法
public String save() {
departmentService.save(department);
return "saveSuccess";
}
// 为save方法定制的prepare方法
public void prepareSave() {
department = new Department();
}