一个强大的父类:ManagerAction
2011-08-23 16:35
155 查看
import static com.xxx.travel.common.utils.ClassUtils.getActualTypeArguments; import static com.xxx.travel.common.utils.ClassUtils.getUUField; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.servlet.ServletContext; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.util.ServletContextAware; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.xxx.travel.common.base.bo.Page; import com.xxx.travel.common.base.service.interfaces.BaseServiceInterface; import com.xxx.travel.common.utils.ClassUtils; import com.opensymphony.xwork2.ModelDriven; /** * 实现了管理的控制器 * @author IXR */ @Results({ @Result(name=ManagerAction.MANAGER_SUCCESS,location="manager/${actionMapping.method}.jsp"), @Result(name=ManagerAction.MANAGER_LIST,location="${actionMapping.name}!list",type="redirectAction") }) public class ManagerAction<S extends BaseServiceInterface<M>,M> extends BaseAction implements ModelDriven<M>,ServletContextAware{ private static final long serialVersionUID = -6850333477033985650L; protected static final String MANAGER_SUCCESS = "manager_success";//默认Result protected static final String MANAGER_LIST = "manager_list"; private String resultName = MANAGER_SUCCESS; protected S service; private M model; private int currentPage = 0;// 当前页码 /** 列表 */ public String list(){ Page<M> page = new Page<M>(); page.setModel(model); page.setCurrentPage(currentPage); page.setResultRows(service.findExampleByPage(page)); request.setAttribute("page", page); getModelFields(); return resultName; } /** 编辑 */ public String edit(){ service.load(model); return MANAGER_SUCCESS; } /** 更新 */ public String update(){ service.update(model); return MANAGER_LIST; } /** 删除 */ public String delete(){ service.delete(model); return MANAGER_LIST; } /** 添加 */ public String add(){ return MANAGER_SUCCESS; } /** 保存 */ public String save(){ try { Field field = getModelUUField(); field.setAccessible(true); field.set(model, UUID.randomUUID().toString()); service.save(model); } catch (Exception e) { // TODO : ERROR LOG.error(e.getMessage()); } return MANAGER_LIST; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public M getModel() { if(model == null){ try { model = getModelClass().newInstance(); } catch (Exception e) { // TODO : ERROR LOG.error(e.getMessage()); } } return model; } /** * 获取对象模型的字段信息 * @return List<Field> * @author IXR */ public List<Field> getModelFields(){ List<Field> getModelFields = new ArrayList<Field>(); for (Field field : getModelClass().getDeclaredFields()) { getModelFields.add(field); } return getModelFields; } public String getResultName() { return resultName; } public void setResultName(String resultName) { this.resultName = resultName; } public Field getModelUUField() { return getUUField(getModelClass()); } /** * 根据M类型来算出带命名空间 * @return 返回类型为 Class<M> * @author IXR */ @SuppressWarnings("unchecked") public Class<M> getModelClass() { return (Class<M>)getActualTypeArguments(this.getClass())[1]; } @SuppressWarnings("unchecked") public void setServletContext(ServletContext servletContext) { WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext); Class<S> bizClass = (Class<S>) ClassUtils.getActualTypeArguments(this.getClass())[0]; String[] names = context.getBeanNamesForType(bizClass); if(names.length > 0){ service = (S)context.getBean(names[0]); } } }
BaseServiceInterface:如下
import java.util.List; import com.xxx.travel.common.base.bo.Page; public interface BaseServiceInterface<M> { /** * 根据条件分页查询数据 * * @param page * 分页信息 * @return List<M> * @author IXR */ public List<M> findExampleByPage(Page<M> page); /** * 保存数据 * * @param m * 模型对象 * @author IXR */ public void save(M m); /** * 根据条件查询数量 * * @return Long * @author IXR */ public Long findExampleCount(M m); /** * 加载数据 * * @param m * 模型对象 * @author IXR */ public void load(M m); /** * 删除对象 * * @param m * 模型对象 * @author IXR */ public void delete(M m); /** * 更新数据 * * @param m * 模型对象 * @author IXR */ public void update(M m); /** * 根据条件查询数据 * * @param M * 模型信息 * @return List<M> * @author IXR */ public List<M> findExample(M m); }
相关文章推荐
- 一个强大的父类:BaseAction
- 一个强大的父类:BaseDao
- [ Android界面实现 ] ZListView,一个最强大的刷新、加载、滑动删除的 ListView 控件(一)
- cpp反汇编之共同继承一个父类
- 推荐一个强大的mysql工具集--maatkit
- 在eclipse中查看一个类及其父类中的所有方法和属性
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
- 转载 一个功能强大超级好用的图表组件Dundas Chart
- 一个简单、漂亮、功能强大的Android日志程序:logger
- Mockito:一个强大的用于 Java 开发的模拟测试框架
- 为什么一个对象可以用父类声明,却用子类实例化
- 一个强大的网络分析shell脚本分享(实时流量、连接统计)
- 一个功能强大的JavaScript开发工具
- Mockito:一个强大的用于Java开发的模拟测试框架
- 常用PS抠图的童鞋有福了,精细到头发丝~~!!!!!偶然寻到一个PS插件。很强大(附上下载地址)
- java实现的一个很强大的彩票网站源码WAP版
- 我也来推荐一个强大的flash应用
- MaterialEditText 一个灰常漂亮的强大EditText
- wso 一个强大的php webshell