import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.byyang.util.Constants;
/**
* doStartTag()和doEndTag()返回值处理:
* SKIP_BODY (0) :跳过了开始和结束标签之间的代码。
* EVAL_BODY_INCLUDE(1):将body的内容输出到存在的输出流中
* SKIP_PAGE(5): 忽略剩下的页面。
* EVAL_PAGE隐含(6):继续执行下面的页
* @author yangby
*
*/
public class PageTag extends TagSupport{
private String url;
public String getUrl(){
return this.url;
}
public void setUrl(String url) {
this.url = url;
}
public int doEndTag()throws JspException{
return EVAL_PAGE;
}
public int doStartTag() throws JspException{
HttpServletRequest request = (HttpServletRequest)this.pageContext.getRequest();
//获取分页bean
Page page = (Page)request.getAttribute("pager");
JspWriter out = this.pageContext.getOut();
//拼接分页信息
StringBuilder s = new StringBuilder();
s.append("共 " + ((page.getSize() - 1) / page.getLength() + 1) + " 页 ");
//设置当前页第一条记录索引
String current = request.getParameter("current");
if(current != null && !"".equals(current)){
page.setOffset(Integer.parseInt(current));
}
if (page.getSize() > page.getLength()){
//获取连接符pref
String pref;
if (this.url.indexOf("?") > -1){
pref = "&";
}else {
pref = "?";
}
this.doStart(s, page, pref);
this.doBody(s, page, pref);
this.doEnd(s,page,pref);
}else{
s.append(" ");
}
s.append(" 共 " + page.getSize() + " 条记录");
try{
out.println(s.toString());
}catch (IOException e){
e.printStackTrace();
}
return SKIP_BODY;
}
/**
* //拼接"首页"和"
* @param s
* @param page
* @param pref
*/
public void doStart(StringBuilder s,Page page,String pref){
if (page.getOffset() > 0){
s.append("
"current=0'>[首页]
\n" + ""current=" + page.getLastOffset() + "'>[\n");
}else{
s.append("\n" );
}
}
/**
* 拼接"尾页"和">"
* @param s
* @param page
* @param pref
*/
public void doEnd(StringBuilder s,Page page,String pref){
if (page.getOffset()
s.append("\n" + "
\n");}else{
s.append("\n"+ "\n");
}
}
/**
* 数字连接
* @param s
* @param page
* @param pref
*/
public void doBody(StringBuilder s,Page page,String pref){
//显示半径
int radius = Constants.MAX_PAGE_INDEX / 2 * page.getLength();
//显示数字的连接从第几条开始
int startOffset;
if ((page.getOffset()
startOffset = 0;
}else{
if (page.getOffset()
startOffset = page.getOffset() - radius;
}else{
startOffset = (page.getSize() / page.getLength() - Constants.MAX_PAGE_INDEX) *
page.getLength();
}
}
for (int i = startOffset; (i
if (i == page.getOffset()){
s.append("" + (i / page.getLength() + 1) + "\n");
}else{
s.append("
\n");}
i += page.getLength();
}
}
}