Struts2的crud

struts2的crud引出的问题:

1.当Action里面有其他类的实例引用属性时,当要用请求参数为该对象的属性赋值时,如何将其压入栈顶。

2.当有的操作(list)不需要创建该属性的实例对象时,或者需要创建实例时,如何解决。

3.struts.xml如何配置选择某一拦截器栈(比如:paramsPrepareParams拦截器栈),又如何通过struts.xml的配置修改某一拦截器的字段值(比如:PrepareInterceptor      的 alwaysInvokePrepare属性)。

问题解决:

1.通过Action实现ModelDriven接口,实现其getModel()方法,getModel()方法的返回值将被压入值栈栈顶。

2.通过Action实现Preparable接口,然后在Action里面为每一个需要的方法准备对应的prepare[ActionMethodName]方法,比如:Action里面有save()方法,则需要创建        prepareSave()方法,通过其返回值来为save()方法准备实例,不需要则可以不准备。在实现了Preparable接口时,需要实现prepare方法,默认是执行的。

3.选择paramsPrepareParams拦截器栈,并将prepare的alwaysInvokePrepare属性赋为false,并将此栈命名为gy,而且被配置使用:

1 <interceptors>
2         <interceptor-stack name="gy">
3                <interceptor-ref name="paramsPrepareParamsStack">
4                    <param name="prepare.alwaysInvokePrepare">false</param>
5                </interceptor-ref>
6          </interceptor-stack>
7 </interceptors>
8  
9 <default-interceptor-ref name="gy"/>
原文地址:https://www.cnblogs.com/gy19920604/p/4837599.html