package 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.util.page.PageQuery;
/**
* 用于分页组件覆盖的类,新的分页组件覆盖此类的bindPageQuery()方法以适合不同的分页创建
*
* @author badqiu
*/
public class PageQueryFactory {
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("PageQueryFactory.MAX_PAGE_SIZE=" + MAX_PAGE_SIZE);
}
/**
* 从request中绑定参数至PageQuery
*
* @return
*/
public static <T extends PageQuery> T bindPageQuery(T pageQuery,
HttpServletRequest request) {
return bindPageQuery(pageQuery, request, null);
}
/**
* 从request中绑定参数至PageQuery
*
* @return
*/
public static <T extends PageQuery> T bindPageQuery(T pageQuery,
HttpServletRequest request, String defaultSortColumns) {
return bindPageQuery(pageQuery, request, defaultSortColumns,
PageQuery.DEFAULT_PAGE_SIZE);
}
/**
* 从request绑定PageQuery的属性值
*/
public static <T extends PageQuery> T bindPageQuery(T pageQuery,
HttpServletRequest request, String defaultSortColumns,
int defaultPageSize) {
try {
Map sourceParams = WebUtils.getParametersStartingWith(request, "");
beanUtils.copyProperties(pageQuery, sourceParams);
} catch (IllegalAccessException e) {
throw new IllegalArgumentException(
"beanUtils.copyProperties() error", e);
} catch (InvocationTargetException e) {
throw new IllegalArgumentException(
"beanUtils.copyProperties() error", e.getTargetException());
}
pageQuery.setPage(ServletRequestUtils.getIntParameter(request,
"pageNumber", 1));
pageQuery.setPageSize(ServletRequestUtils.getIntParameter(request,
"pageSize", defaultPageSize));
if (pageQuery.getPageSize() > MAX_PAGE_SIZE) {
pageQuery.setPageSize(MAX_PAGE_SIZE);
}
return pageQuery;
}
}