[TOC]
添加取派员
一、基础准备
- 更改staff.jsp页面,删除编号的
<input>
标签 - 更改staff.hbm.xml配置文件,生成策略为uuid(Hibernate自动生成的长度为32为,没有横线)
二、添加基于easyui的自定义校验规则 - 扩展手机号校验规则
- 自定义扩展规则
$(function(){
//扩展手机号校验规则
$.extend($.fn.validatebox.defaults.rules, {
telephone:{
validator:function(value, param){
var reg = /^1[3|4|5|7|8][0-9]{9}$/;
return reg.test(value);
},
message:"手机号输入有误"
}
});
});
- 手机号的应用自定义规则
<input type="text" data-options="validType:'telephone'" name="telephone" class="easyui-validatebox" required="true"/>
三、为保存按钮添加事件
//为保存按钮添加事件
$("#save").click(function(){
//表单校验
var validateRes = $("#addStaffForm").form("validate");
if(validateRes){
//通过则提交表单
$("#addStaffForm").submit();
}
});
四、服务端实现
- 创建StaffAction.add方法
@Controller("staffAction")
@Scope("prototype")
public class StaffAction extends BaseAction<Staff>{
private static final long serialVersionUID = 1L;
/**
* 添加取派员
* @return
*/
public String add(){
staffService.save(model);
return LIST;
}
@Autowired
private StaffService staffService;
public StaffService getStaffService() {
return staffService;
}
public void setStaffService(StaffService staffService) {
this.staffService = staffService;
}
}
- 创建StaffService相关
public interface StaffService {
void save(Staff model);
}
@Service
@Transactional(isolation=Isolation.REPEATABLE_READ, propagation=Propagation.REQUIRED, readOnly=true)
public class StaffServiceImpl implements StaffService{
@Override
@Transactional(isolation=Isolation.REPEATABLE_READ, propagation=Propagation.REQUIRED, readOnly=false)
public void save(Staff model) {
staffDao.save(model);
}
private StaffDao staffDao;
public StaffDao getStaffDao() {
return staffDao;
}
public void setStaffDao(StaffDao staffDao) {
this.staffDao = staffDao;
}
}
- 创建StaffDao相关
public interface StaffDao extends BaseDao<Staff>{
}
public class StaffDaoImpl extends BaseDaoImpl<Staff> implements StaffDao{
}
- 配置StaffAction
<action name="staffAction_*" class="staffAction" method="{1}">
<result name="list">/WEB-INF/pages/base/staff.jsp</result>
</action>
取派员分页查询
一、页面调整
- 修改staff.jsp中的表格的获取datagrid数据的url为staffAction_pageQuery.action
二、封装PageBean工具类
public class PageBean<T> {
private int currentPage;
private int pageSize;
private DetachedCriteria detachedCriteria;
private int total;
private List<T> rows;
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public DetachedCriteria getDetachedCriteria() {
return detachedCriteria;
}
public void setDetachedCriteria(DetachedCriteria detachedCriteria) {
this.detachedCriteria = detachedCriteria;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List<T> getRows() {
return rows;
}
public void setRows(List<T> rows) {
this.rows = rows;
}
}
三、服务端实现
- 编写StaffAction.pageQuery
/**
* 分页查询取派员
* @return
*/
public String pageQuery(){
PageBean<Staff> pageBean = new PageBean<Staff>();
pageBean.setCurrentPage(page);
pageBean.setPageSize(rows);
DetachedCriteria dc = DetachedCriteria.forClass(Staff.class);
pageBean.setDetachedCriteria(dc);
staffService.pageQuery(pageBean);
//将pageBean转为json写到页面中
JsonConfig jsonConfig = new JsonConfig();
//设置排除属性
jsonConfig.setExcludes(new String[]{"currentPage", "detachedCriteria", "pageSize"});
String json = JSONObject.fromObject(pageBean, jsonConfig).toString();
System.out.println(json);
ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");
BOSUtils.getWriter().write(json);
return NONE;
}
- 编写StaffService.pageQuery
@Override
public void pageQuery(PageBean<Staff> pageBean) {
staffDao.pageQuery(pageBean);
}
3.在BaseDao抽取通用的分页查询方法,并在BaseDaoImpl中实现
@Override
@SuppressWarnings("unchecked")
public void pageQuery(PageBean<T> pageBean) {
int currentPage = pageBean.getCurrentPage();
int pageSize = pageBean.getPageSize();
DetachedCriteria detachedCriteria = pageBean.getDetachedCriteria();
//指定Hibernate框架发出sql的形式 - 查询记录总数
detachedCriteria.setProjection(Projections.rowCount());
List<Long> countList = (List<Long>) getHibernateTemplate().findByCriteria(detachedCriteria);
Long count = countList.get(0);
pageBean.setTotal(count.intValue());
//清空指定的查询记录数,以进行分页查询
detachedCriteria.setProjection(null);
int firstResult = (currentPage-1)*pageSize;
int maxResults = pageSize;
List<T> rows = (List<T>) getHibernateTemplate().findByCriteria(detachedCriteria,firstResult,maxResults);
pageBean.setRows(rows);
}