Struts:如何写一个BaseAction,继承它的Action可以初始化完成动作?

时间:2021-04-21 18:36:49
Struts:如何写一个BaseAction,继承它的Action可以初始化完成动作?
例如
class BaseAction extends Action {
  .. 删除HttpSession作用域中的所有对象;
}

class queryAction extends BaseAction {
  // 这时HttpSession中的对象已经清除干净
  execute....
}

7 个解决方案

#1


我是这样写的,希望对你有帮助。

public abstract BaseAction extends Action{

public void f1(){

}

public boolean f2(){
   return true;
}

public ActionForward execute(ActionMapping mapping, ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
  f1();
  if(!f2()){
     return mapping.findForward("failure");
  }
  return process(mapping, form, request, response);
}

public abstract ActionForward process(ActionMapping mapping, ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception ;
}

所有的action继承BaseAction,实现process方法。

#2


这样写:
  public void f1(HttpServletRequest request,
                               HttpServletResponse response){
   request.getSession().invalidate();
}

#3


to Saro: 谢谢

不过当子类继承BaseAction,覆盖

public ActionForward execute(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
...
}

那么以下这段代码还能执行吗?

{
  f1();
  if(!f2()){
     return mapping.findForward("failure");
  }
  return process(mapping, form, request, response);
}

#4


notice

#5


子类覆盖process方法即可,那么子类会调用父类的execute方法,在其中调用子类的process方法

#6


就是 stone****(东东) 说的那样,如果你不想执行f1(),f2()的话,直接继承Action并实现execute方法就行了。

#7


楼上的说的都很清楚了,其实这个方法不错,就是struts内部也采用类似的结构进行封装的!

#1


我是这样写的,希望对你有帮助。

public abstract BaseAction extends Action{

public void f1(){

}

public boolean f2(){
   return true;
}

public ActionForward execute(ActionMapping mapping, ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
  f1();
  if(!f2()){
     return mapping.findForward("failure");
  }
  return process(mapping, form, request, response);
}

public abstract ActionForward process(ActionMapping mapping, ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception ;
}

所有的action继承BaseAction,实现process方法。

#2


这样写:
  public void f1(HttpServletRequest request,
                               HttpServletResponse response){
   request.getSession().invalidate();
}

#3


to Saro: 谢谢

不过当子类继承BaseAction,覆盖

public ActionForward execute(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
...
}

那么以下这段代码还能执行吗?

{
  f1();
  if(!f2()){
     return mapping.findForward("failure");
  }
  return process(mapping, form, request, response);
}

#4


notice

#5


子类覆盖process方法即可,那么子类会调用父类的execute方法,在其中调用子类的process方法

#6


就是 stone****(东东) 说的那样,如果你不想执行f1(),f2()的话,直接继承Action并实现execute方法就行了。

#7


楼上的说的都很清楚了,其实这个方法不错,就是struts内部也采用类似的结构进行封装的!