package com.jspxcms.common.freemarker;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import com.jspxcms.common.web.PageUrlResolver;
import freemarker.core.Environment;
import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
/**
* FreeMarker翻页方法
*
* @author liufang
*
*/
public class PagingMethod implements TemplateMethodModelEx {
// page,location,pageParam,pageMethod
@SuppressWarnings("rawtypes")
public Object exec(List args) throws TemplateModelException {
Integer page = null;
if (args.size() > 0) {
TemplateModel arg0 = (TemplateModel) args.get(0);
page = Freemarkers.getInteger(arg0, "arg0");
}
if (page == null || page < 1) {
page = 1;
}
String anchor = null;
if (args.size() > 1) {
TemplateModel arg1 = (TemplateModel) args.get(1);
anchor = Freemarkers.getString(arg1, "arg1");
}
Environment env = Environment.getCurrentEnvironment();
PageUrlResolver urlResolver = Freemarkers.getPageUrlResolver(env);
if (urlResolver != null) {
String url = urlResolver.getPageUrl(page);
if (StringUtils.isNotBlank(anchor)) {
url += anchor;
}
return url;
}
String url = Freemarkers.getUrl(env);
if (StringUtils.isBlank(url)) {
url = "";
}
String param = Freemarkers.PAGE;
String queryString = null;
String uri = url;
int pos = url.indexOf("?");
if (pos != -1) {
queryString = url.substring(pos + 1);
uri = url.substring(0, pos);
}
if (StringUtils.isNotBlank(queryString)) {
// 删除原有page。page=3&page=4&page=10&page=0
Pattern p = Pattern.compile("\\&*\\s*" + param + "\\s*=[^\\&]*");
Matcher m = p.matcher(queryString);
queryString = m.replaceAll("");
queryString = queryString.trim();
if (queryString.startsWith("&")) {
queryString = queryString.substring(1);
}
}
if (page > 1) {
if (StringUtils.isNotBlank(queryString)) {
queryString += "&" + param + "=" + page;
} else {
queryString = param + "=" + page;
}
}
String result;
if (StringUtils.isNotBlank(queryString)) {
result = uri + "?" + queryString;
} else {
result = uri;
}
if (StringUtils.isNotBlank(anchor)) {
result += anchor;
}
return result;
}
}