SSH的

baseAction

简单叙述下作用

1.通用方法如增删改,获取表格,获取树等等常用方法

2.其他action继承baseAction达到基本不写代码或少写代码,使其他action具有baseAction的方法,同时可以自己特有的方法

上代码

@ParentPackage("default")
@Namespace("/")
public class BaseAction<T> extends ActionSupport {

    private static final Logger logger = Logger.getLogger(BaseAction.class);

    
    protected int page = 1;// 当前页
    protected int rows = 10;// 每页显示记录数
    protected String sort;// 排序字段
    protected String order = "asc";// asc/desc
    protected String q;// easyui的combo和其子类过滤时使用

    protected String id;// 主键
    protected String ids;// 主键集合,逗号分割
    protected T data;// 数据模型(与前台表单name相同,name="data.xxx")

    protected BaseServiceI<T> service;// 业务逻辑
  /**
     * 获得request
     *
     * @return
     */
    public HttpServletRequest getRequest() {
        return ServletActionContext.getRequest();
    }

    /**
     * 获得response
     *
     * @return
     */
    public HttpServletResponse getResponse() {
        return ServletActionContext.getResponse();
    }

    /**
     * 获得session
     *
     * @return
     */
    public HttpSession getSession() {
        return ServletActionContext.getRequest().getSession();
    }
    /**
     * 保存一个对象
     */
    public void save() {
        Json json = new Json();
        if (data != null) {
            service.save(data);
            json.setSuccess(true);
            json.setMsg("新建成功!");
        }
        writeJson(json);
    }

    /**
     * 更新一个对象
     */
    public void update() {
        
        Json json = new Json();
        String reflectId = null;
        
        try {
            if (data != null) {
                reflectId = (String) FieldUtils.readField(data, "id", true);
            }
        }
        catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        if (!StringUtils.isBlank(reflectId)) {
            try {
                T t = service.getById(reflectId);
                BeanUtils.copyProperties(data,t);
                service.update(t);
                json.setSuccess(true);
                json.setMsg("更新成功");
                
            } catch (Exception e) {
                json.setSuccess(false);
                json.setMsg("更新失败");
                logger.info(e.toString());
            }
        }
        writeJson(json);
    }

    /**
     * 删除一个对象
     */
    public void delete() {
        Json json = new Json();
        if (!StringUtils.isBlank(id)) {
            T t = service.getById(id);
            service.delete(t);
            json.setSuccess(true);
            json.setMsg("删除成功!");
        }
        writeJson(json);
    }
}

将BaseActiong写成泛型 这样前台写成data.xxx就可以自动被Struts的类型转换为data

这样对每次操作自动匹配不同的Bean类,非常方便。

service层

serviceI接口定义不同的方法方法

public interface BaseServiceI<T> {

    /**
     * 保存一个对象
     * 
     * @param o
     *            对象
     * @return 对象的ID
     */
    public Serializable save(T o);
}

方法太多 写个例子就好

serviceimpl实现类

@Service("BaseService")
@Transactional
public class BaseServiceImpl<T> implements BaseServiceI<T> {

    @Autowired
    private BaseDaoI<T> baseDao;

    @Override
    public Serializable save(T o) {
        return baseDao.save(o);
    }
}

注入baseDao具体实现方法

下面是BaseDao

BaseDaoI接口定义baseDao的方法

public interface BaseDaoI<T> {

    /**
     * 保存一个对象
     * 
     * @param o
     *            对象
     * @return 对象的ID
     */
    public Serializable save(T o);
}

方法太多不再写

BaseDaoImpl

@Repository("baseDao")
public class BaseDaoImpl<T> implements BaseDaoI<T> {

    @Autowired
    private SessionFactory sessionFactory;

    /**
     * 获得当前事物的session
     * 
     * @return org.hibernate.Session
     */
    public Session getCurrentSession() {
        return sessionFactory.getCurrentSession();
    }

    @Override
    public Serializable save(T o) {
        if (o != null) {
            return getCurrentSession().save(o);
        }
        return null;
    }
}

BaseDaoimpl
需要注入sessionFactory(方法太多不再写)

这样所有都以泛型写通用方法,使得每个继承类同事拥有父类的基础方法,也同时拥有自己特有的方法。如果某个方法要反复使用,就写成通用方法。大量的减少了代码

posted on 2015-04-28 15:36  包子吃三斤  阅读(590)  评论(0编辑  收藏  举报