/**
* 分页标签
* @author WangZongHuan
*/
public class SplitPageTag extends SimpleTagSupport{
/**
* 显示模式
*/
private int pageModel = 1;
/**
* 是否支持查询
*/
private boolean isQuery = true;
/**
* 主题颜色
*/
private String color = "#666666"; //#2A6496 #406518 #F16C32 #406518
/**
* DIV Class 名称
*/
private String divClassName = "split_page_tag_" + UUID.randomUUID();
/**
* 表单中当前页字段ID
*/
private String pageIndexId;
/**
* 显示长度
*/
private int length = 5;
/**
* 当前页码
*/
private int pageIndex;
/**
* 显示条数
*/
private int pageSize;
/**
* 总页数
*/
private int pageCount;
/**
* 总条数
*/
private int recordCount;
/**
* 跳转路径或者表单ID
*/
private String url;
@Override
public void doTag() throws JspException, IOException {
StringBuffer content = new StringBuffer();
if(recordCount > 0){
if (pageSize > recordCount){
pageSize = recordCount;
}
/** 计算出总页数 */
pageCount = (recordCount % pageSize == 0) ? recordCount / pageSize : recordCount / pageSize + 1;
if (pageIndex > pageCount){
pageIndex = pageCount;
}
switch (pageModel) {
case 1:
content = splitPageTagModel1(isQuery);
break;
case 2:
content = splitPageTagModel2(isQuery);
break;
default:
content = splitPageTagModel1(isQuery);
break;
}
}else{
content.append("<div>没有任何记录!</div>");
}
getJspContext().getOut().println(content.toString().trim());
}
/**
* 第一种分页
* @param isQuery 是否可以查询
* @return content 标签内容
*/
private StringBuffer splitPageTagModel1(boolean isQuery){
//替换标识
String REPLACE_FLAG = "###";
//判断是否为表单提交
boolean isFormSubmit = isFormSubmit(url);
//当前页的项
String CURRENT_PAGE_LI = "<li class=\"number_li current_page_li\">";
//没有链接的文字项
String NO_LINK_TEXT_LI = "<li class=\"text_li no_link_li\">";
//有链接的文字项
String LINK_TEXT_LI = "";
if(isFormSubmit){
LINK_TEXT_LI = "<li class=\"text_li\" οnmοusemοve=\"splitPage_over(this);\" οnmοuseοut=\"splitPage_out(this);\" οnclick=\"splitPage_submitForm('" + url + "'," + REPLACE_FLAG + ");\">";
}else{
LINK_TEXT_LI = "<li class=\"text_li\" οnmοusemοve=\"splitPage_over(this);\" οnmοuseοut=\"splitPage_out(this);\" οnclick=\"splitPage_submitUrl('" + REPLACE_FLAG + "');\">";
}
//没有链接的数字项
String NO_LINK_NUMBER_LI = "<li class=\"number_li no_link_li\">";
//有链接的数字项
String LINK_NUMBER_LI = "";
if(isFormSubmit){
LINK_NUMBER_LI = "<li class=\"number_li\" οnmοusemοve=\"splitPage_over(this);\" οnmοuseοut=\"splitPage_out(this);\" οnclick=\"splitPage_submitForm('" + url + "'," + REPLACE_FLAG + ");\">";
}else{
LINK_NUMBER_LI = "<li class=\"number_li\" οnmοusemοve=\"splitPage_over(this);\" οnmοuseοut=\"splitPage_out(this);\" οnclick=\"splitPage_submitUrl('" + REPLACE_FLAG + "');\">";
}
StringBuffer content = new StringBuffer();
content.append("<div class=\""+ divClassName +"\">");
content.append("<ul>");
//上一页
if(pageIndex == 1){
content.append(NO_LINK_TEXT_LI + "上一页</li>");
}else{
content.append(createLI(isFormSubmit, String.valueOf(pageIndex - 1),"上一页", LINK_TEXT_LI, REPLACE_FLAG));
}
//页数
if(pageCount <= length){
for(int i = 1; i <= pageCount; i++){
if(pageIndex == i){
content.append(CURRENT_PAGE_LI + i + "</li>");
}else{
content.append(createLI(isFormSubmit, String.valueOf(i), String.valueOf(i), LINK_NUMBER_LI, REPLACE_FLAG));
}
}
}else{
if(pageIndex < (length/2)+3){
for(int i = 1; i <= length; i++){
if(pageIndex == i){
content.append(CURRENT_PAGE_LI + i + "</li>");
}else{
content.append(createLI(isFormSubmit, String.valueOf(i), String.valueOf(i), LINK_NUMBER_LI, REPLACE_FLAG));
}
}
content.append(NO_LINK_NUMBER_LI + "...</li>");
content.append(createLI(isFormSubmit, String.valueOf(pageCount), String.valueOf(pageCount), LINK_NUMBER_LI, REPLACE_FLAG));
}else if(pageIndex >= pageCount - (length/2)-1){
content.append(createLI(isFormSubmit, String.valueOf(1), String.valueOf(1), LINK_NUMBER_LI, REPLACE_FLAG));
content.append(NO_LINK_NUMBER_LI + "...</li>");
for(int i = pageCount - (length-1); i <= pageCount; i++){
if(pageIndex == i){
content.append(CURRENT_PAGE_LI + i + "</li>");
}else{
content.append(createLI(isFormSubmit, String.valueOf(i), String.valueOf(i), LINK_NUMBER_LI, REPLACE_FLAG));
}
}
}else{
content.append(createLI(isFormSubmit, String.valueOf(1), String.valueOf(1), LINK_NUMBER_LI, REPLACE_FLAG));
content.append(NO_LINK_NUMBER_LI + "...</li>");
for(int i = (length/2); i >= 1; i--){
content.append(createLI(isFormSubmit, String.valueOf(pageIndex - i), String.valueOf(pageIndex - i), LINK_NUMBER_LI, REPLACE_FLAG));
}
content.append(CURRENT_PAGE_LI + pageIndex + "</li>");
for(int i = 1; i <= (length/2); i++){
content.append(createLI(isFormSubmit, String.valueOf(pageIndex + i), String.valueOf(pageIndex + i), LINK_NUMBER_LI, REPLACE_FLAG));
}
content.append(NO_LINK_NUMBER_LI + "...</li>");
content.append(createLI(isFormSubmit, String.valueOf(pageCount), String.valueOf(pageCount), LINK_NUMBER_LI, REPLACE_FLAG));
}
}
//下一页
if(pageIndex == pageCount){
content.append(NO_LINK_TEXT_LI + "下一页</li>");
}else{
content.append(createLI(isFormSubmit, String.valueOf(pageIndex + 1), "下一页", LINK_TEXT_LI, REPLACE_FLAG));
}
content.append("</ul>");
if(isQuery){
content.append("<span class=\"text_span\">");
content.append("共" + pageCount + "页 ");
content.append("第 <input type=\"text\" id=\"splitPage_pageNumber\" value=\"" + pageIndex + "\" style=\"height:19px; width:35px; text-align:center;\"/> 页 ");
if(isFormSubmit){
content.append(" <span class=\"go_span\" οnclick=\"splitPage_query('"+ url +"');\">GO</span>");
}else{
content.append(" <span class=\"go_span\" οnclick=\"splitPage_query();\">GO</span>");
}
content.append("</span>");
}
content.append("<div style=\"clear: left;\"></div>");
content.append("</div>");
//样式和脚本
content.append("<script type=\"text/javascript\">")
.append("function splitPage_submitUrl(url){ document.location.href = encodeURI(url); }")
.append("function splitPage_submitForm(formID,pageIndex){var pageIndexId = '" + pageIndexId + "'; if(pageIndexId == 'null' || pageIndexId == \"\"){ alert(\"表单提交需提供pageIndexId参数!\"); return false; } ")
.append("var form = document.getElementById(formID); var pageIndexInput = document.getElementById(pageIndexId);")
.append("if(form == null){ alert(\"未找到ID为\" + formID + \"的表单!\"); return false; }")
.append("if(pageIndexInput == null){ alert(\"未找到ID为\"+ pageIndexId + \"的文本框!\"); return false; }")
.append("pageIndexInput.value = pageIndex; form.submit(); }")
.append("function splitPage_query(formID){ var num = document.getElementById(\"splitPage_pageNumber\").value;")
.append("if (isNaN(num) || num < 1 || num >"+ pageCount +"){ alert(\"请输入[1-"+ pageCount +"]范围内页码!\"); return false; }")
.append("if(formID != null && formID != \"\"){splitPage_submitForm(formID,num);} else {var tempUrl = '" + url + "'.replace(\"{0}\",num); splitPage_submitUrl(tempUrl);} }")
.append("function splitPage_over(target){ target.style.color = \"#2A6496\"; target.style.backgroundColor = \"#EEEEEE\"; target.style.cursor = \"pointer\"; target.style.borderColor = \"" + color + "\"; }")
.append("function splitPage_out(target){ target.style.color = \"\"; target.style.backgroundColor = \"\"; target.style.cursor = \"\"; target.style.borderColor=\"\"; }")
.append("</script>")
.append("<style type=\"text/css\">")
.append("."+ divClassName +"{ margin-top:5px; font-family:\"宋体\";}")
.append("."+ divClassName +" ul{ margin:0px; padding:0px; list-style:none; font-size:12px; }")
.append("."+ divClassName +" ul li{ float:left; margin:0px; border:solid 1px #cccccc; height:22px;")
.append(" line-height:22px; display:block; margin-left:5px;color:" + color + "; padding:1px 8px 0px 8px; text-align:center; }")
.append("."+ divClassName +" ul li.number_li{ }")
.append("."+ divClassName +" ul li.text_li{ }")
.append("."+ divClassName +" ul li.current_page_li{ background-color:" + color + "; font-weight:bolder; color:#FFFFFF;}")
.append("."+ divClassName +" ul li.no_link_li{ color:#cccccc; }")
.append("."+ divClassName +" .text_span{ font-size:12px; margin:3px 0px 0px 10px; color:#999999; float:left;}")
.append("."+ divClassName +" .text_span .go_span{ padding:4px 10px 2px 10px; font-weight:bold; ")
.append(" color:#FFFFFF; background-color:" + color + "; cursor:pointer; }")
.append("</style>");
return content;
}
/**
* 第二种分页
* @param isQuery 是否可以查询
* @return content 标签内容
*/
private StringBuffer splitPageTagModel2(boolean isQuery){
StringBuffer content = new StringBuffer();
content.append("<div>第二种分页</div>");
return content;
}
/**
* 判断是否表单提交
* @param url 提交路径或者表单ID
* @return true 表单提交 false 路径提交
*/
private boolean isFormSubmit(String url){
return url.indexOf("{0}") == -1 ? true : false;
}
/**
* 创建LI(适用于模型1)
* @param isFormSubmit 是否为表单提交
* @param pageIndex 当前页码
* @param linkText 链接显示的文字
* @param LI LI标签前部分
* @param REPLACE_FLAG 替换表示符
* @return LI标签字符串
*/
private String createLI(boolean isFormSubmit,String pageIndex,String linkText,String LI,String REPLACE_FLAG){
StringBuffer content = new StringBuffer();
if(!isFormSubmit){
String tempUrl = url.replace("{0}", pageIndex); //将路径中的标识符替换成当前页码
content.append(LI.replace(REPLACE_FLAG, tempUrl) + linkText + "</li>");
}else{
content.append(LI.replace(REPLACE_FLAG, pageIndex) + linkText + "</li>");
}
return content.toString();
}
public int getPageModel() {
return pageModel;
}
public void setPageModel(int pageModel) {
this.pageModel = pageModel;
}
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
if (pageIndex < -1){
pageIndex = 1;
}else{
this.pageIndex = pageIndex;
}
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if (pageSize < 1){
this.pageSize = 1;
}else{
this.pageSize = pageSize;
}
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getRecordCount() {
return recordCount;
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}
public boolean getIsQuery() {
return isQuery;
}
public void setIsQuery(boolean isQuery) {
this.isQuery = isQuery;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public String getPageIndexId() {
return pageIndexId;
}
public void setPageIndexId(String pageIndexId) {
this.pageIndexId = pageIndexId;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
|