package com.company.project.common.util;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.util.WebUtils;
import cn.org.rapid_framework.page.PageRequest;
import cn.org.rapid_framework.util.page.PageQuery;
/**
* 用于分页组件覆盖的类,新的分页组件覆盖此类的bindPageRequest()方法以适合不同的分页创建
* @author badqiu
*/
public class PageRequestFactory {
public static final int MAX_PAGE_SIZE = 1000;
static BeanUtilsBean beanUtils = new BeanUtilsBean();
static {
//注册全局的converters
ConvertRegisterHelper.registerConverters();
//注册专用的BeanUtils用于注册日期类型的转换
String[] datePatterns = new String[] {"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss","yyyy-MM-dd HH:mm:ss.SSS","HH:mm:ss"};
ConvertRegisterHelper.registerConverters(beanUtils.getConvertUtils(),datePatterns);
System.out.println("PageRequestFactory.MAX_PAGE_SIZE="+MAX_PAGE_SIZE);
}
/**
* 从request中绑定参数至PageRequest
* @return
*/
public static <T extends PageRequest> T bindPageRequest(T pageRequest,HttpServletRequest request){
return bindPageRequest(pageRequest, request, null);
}
/**
* 从request中绑定参数至PageRequest
* @return
*/
public static <T extends PageRequest> T bindPageRequest(T pageRequest,HttpServletRequest request,String defaultSortColumns){
return bindPageRequest(pageRequest, request, defaultSortColumns, PageQuery.DEFAULT_PAGE_SIZE);
}
/**
* 从request绑定PageRequest的属性值
*/
public static <T extends PageRequest> T bindPageRequest(T pageRequest, HttpServletRequest request,String defaultSortColumns, int defaultPageSize) {
try {
Map sourceParams = WebUtils.getParametersStartingWith(request, "");
beanUtils.copyProperties(pageRequest, sourceParams);
} catch (IllegalAccessException e) {
throw new IllegalArgumentException("beanUtils.copyProperties() error",e);
} catch (InvocationTargetException e) {
throw new IllegalArgumentException("beanUtils.copyProperties() error",e.getTargetException());
}
pageRequest.setPageNumber(ServletRequestUtils.getIntParameter(request, "pageNumber", 1));
pageRequest.setPageSize(ServletRequestUtils.getIntParameter(request, "pageSize", defaultPageSize));
pageRequest.setSortColumns(ServletRequestUtils.getStringParameter(request, "sortColumns",defaultSortColumns));
if(pageRequest.getPageSize() > MAX_PAGE_SIZE) {
pageRequest.setPageSize(MAX_PAGE_SIZE);
}
return pageRequest;
}
}