各个Action中共用的方法/变量都抽离到BaseAction中
针对一些在action中使用到的变量和方法要封装到基础action中, 然后继承过来使用, 比如
public class SysUserGroupAction extends ActionSupport implements ModelDriven<SysUserGroupForm>, ServletRequestAware {}
这是部门action, 因为要使用到HttpServletRequest 的 request对象接收前端参数, 所以需要实现ServletRequestAware接口, 然后这样写:
privateHttpServletRequest request; @Override public void setServletRequest(HttpServletRequest request) { this.request = request; }
对于所有的action, 比如订单action/顾客action/菜单action/商品action.....都这样写, 代码的重复率太高, 是在不好维护, 所以需要封装到一个BaseAction.java中,
因为原来的action继承ActionSupport, 所以这个BaseAction也要继承ActionSupport类, 还要实现ServletRequestAware接口, 而SysUserGroupAction不再去
继承ActionSupport和实现ServletRequestAware 接口, 只需要继承BaseAction即可, 代码改成:
创建BaseAction.java:
package cn.itcast.crm.web.action; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionSupport; // 基础Action public class BaseAction extends ActionSupport implements ServletRequestAware { private static final long serialVersionUID = 2453074903257305381L; // protected在继承类中可以调用, private只能在本类中使用 protected HttpServletRequest request; @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
原来的SysUserGroupAction.java改成:
public class SysUserGroupAction extends BaseAction implements ModelDriven<SysUserGroupForm> {}
改成这样之后, 在所有的具体Action中只要继承了BaseAction, 都可以在action中直接使用request对象, 大大减少代码量, 降低代码重复率, 提高代码可维护性,
代码结构变得清晰.