自定义标签
- 自定义标签生命周期
SKIP_BODY:跳过主体
EVAL_BODY_INCLUDE:计算标签主体内容并[输出]
EVAL_PAGE:计算页面的后续部分
SKIP_PAGE:跳过页面的后续部分
EVAL_BODY_AGAIN:再计算主体一次
2.1 创建一个标签助手类(继承BodyTagSupport),运行到自定义标签的时候实 例化标签助手类, 标签属性必须助手类的属性对应、且要提供对应get/set方法
2.2 在JSP通过taglib指令导入标签库描述文件.
2.3 配置好dld文件,标签库.创建标签库描述文件(tld),添加自定义标签的配置
注意点:tld文件必须保存到WEB-INF目录或其子目录
通用分页
- 定义好分页需要的属性:
pagination=true;开启分页
3.1 分页助手类:PageTag
定义page的属性:
请求的参数:
private Map<String, String[]> parameterMap;
req.getParameterMap();
请求的地址:PageBean 的请求路径url.
private String url;
req.getContextPath()+req.getServletPath();
package com.hong.mvc.test.tag;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import com.hong.mvc.test.util.PageBean;
public class PageTag extends BodyTagSupport{
private static final long serialVersionUID = 1L;
//定义pageBean数属性
private PageBean pageBean;
public PageBean getPageBean() {
return pageBean;
}
public void setPageBean(PageBean pageBean) {
this.pageBean = pageBean;
}
public PageTag() {}
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
JspWriter out = pageContext.getOut();
try {
out.println(toHtml());
} catch (IOException e) {
throw new RuntimeException(e);
}
return SKIP_BODY;
}
public String toHtml() {
StringBuffer bf=new StringBuffer();
//生产分页按钮
bf.append("当前第:"+this.pageBean.getPage()+"页 共"+this.pageBean.getMaxPage()+"页 共"+this.pageBean.getTotal()+"条 ");
bf.append("<a href='javascript:doForward(1)'>首页</a>");
bf.append("<a href='javascript:doForward("+this.pageBean.getFrontPage()+")'> 上一页</a>");
bf.append("<a href='javascript:doForward("+this.pageBean.getNextPage()+")'> 下一页</a>");
bf.append("<a href='javascript:doForward("+this.pageBean.getMaxPage()+")'> 末页</a>");
bf.append("<input type='text' id='gotoPage' style='width: 30px'><a href='javascript:gotoPage()'>确定</a>");
//生成分页的表单
bf.append("<form id='form' action='"+this.pageBean.getUrl()+"' method='post'>");
bf.append("<input id='page' type='hidden' name='page' />");
Map<String, String[]> parameterMap=pageBean.getParameterMap();
Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
for (Entry<String, String[]> entry : entrySet) {
String name=entry.getKey();
String values[]=entry.getValue();
if(name.equals("page")) {
continue;
}
for(String value : values) {
bf.append("<input type='hidden' name='"+name+"' value='"+value+"'/>");
}
}
bf.append("</form>");
//js
bf.append("<script type='text/javascript'>\r\n" +
" function doForward(page){\r\n" +
" console.info(page);\r\n" +
" document.getElementById('page').value=page;\r\n" +
" document.getElementById('form').submit();\r\n" +
" }\r\n" +
" \r\n" +
" function gotoPage(){\r\n" +
" var page=document.getElementById('gotoPage').value;\r\n" +
" if(isNaN(page)){\r\n" +
" alert(\"请输入一个数字\");\r\n" +
" }else if(page<1 || page>"+this.pageBean.getMaxPage()+"){\r\n" +
" alert(\"请输入1-"+this.pageBean.getMaxPage()+"之间的数字\");\r\n" +
" }else{\r\n" +
" doForward(page) \r\n" +
" }\r\n" +
" }\r\n" +
" </script> ");
return bf.toString();
}
}