自定义JSP标签需要继承TagSupport类 然后在里面重写doEndTag()方法,框架大概如下: import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; public class PageTag extends TagSupport{ private static final long serialVersionUID = 8028854417096217249L; private final Logger logger = Logger.getLogger(PageTag.class); protected String id; /** * 当前页 */ protected int pageNum = 1; /** * 每页大小 */ protected int pageSize = 10; /** * 总条数 */ protected int totalObject; /** * 总页数 */ protected int totalPageNum; private int multiLineShow = 1; /** * 是否双排展示 */ private boolean doubleShow = false; /** * 是否是采用 LI布局 */ private boolean liShow = false; /** * 是否为弹出层显示 */ protected boolean dialogShow = false; private Collection items; public int doEndTag() throws JspException { genPageInfo(); return TagSupport.SKIP_BODY; } protected void genPageInfo() { ServletContext servletContext = pageContext.getServletContext(); Configuration configuration = new Configuration(); configuration.setDefaultEncoding("GBK"); configuration.setServletContextForTemplateLoading(servletContext, "/"); try { Template template = configuration.getTemplate(getTemplatePath()); Writer out = pageContext.getOut(); getPageInfo(); Map rootMap = getResultMap(); template.process(rootMap, out); } catch (Exception e) { logger.error("生成分页标签错误" + e, e); } } protected Map genRootMap() { Map rootMap = new HashMap (); rootMap.put("multiLineShow", multiLineShow); rootMap.put("liShow", liShow); return rootMap; } public void getPageInfo() { HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); if (isAjaxPage()) { Page page = (Page)request.getAttribute("page"); totalObject = page.getTotalObject(); pageNum = page.getPageNum(); pageSize = (Integer)request.getAttribute("pageSize"); } else { totalObject = ((null == items) ? 0 : items.size()); } if (isDoubleShow()) { multiLineShow = 2; } totalPageNum = (totalObject - 1) / pageSize + 1; } private Map getResultMap() { Map rootMap = genRootMap(); rootMap.put("pageNum", pageNum); rootMap.put("pageSize", pageSize); rootMap.put("totalObject", totalObject); rootMap.put("totalPageNum", totalPageNum); rootMap.put("dialogShow", dialogShow); rootMap.put("id", id); HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); rootMap.put("contextPath", request.getContextPath()); return rootMap; } protected String getTemplatePath() { return "/jsp/common/page.ftl"; } set、get方法}然后创建Tag Library的描述文件,在xx.tld tld文件里定义标签,接着在web.xml文件里面加入 元素,最后在jsp里就可引用了
pageTag.tld文件 1.0 1.2 p \/tags\/page.tld ajaxPage com.hao.common. id true java.lang.String 异步加载DIV的id true onChangePageFunc true java.lang.String true url true java.lang.String true dialogShow false java.lang.Boolean true page com.hao.common.g empty 使用说明: items action里面查询的 结果集 需要将这1个参数传给page.jsp
pageSize 可选项 isLiShow 是否是采用的 li布局
isDoubleShow:是否为双排展示
isMultiLineShow:多排展示
]]>
id false java.lang.String true pageSize false java.lang.Integer true items true java.util.Collection true liShow java.lang.Boolean false doubleShow java.lang.Boolean false dialogShow false java.lang.Boolean true multiLineShow false java.lang.Integer true public class extends PageTag{ private static final long serialVersionUID = -2926149990721737658L; /** * ajax调用的url */ private String url; /** * 点击调页是调用的方法 */ private String onChangePageFunc; protected String getTemplatePath() { return "/jsp/common/.ftl"; } protected Map
genRootMap() { Map rootMap = new HashMap (); rootMap.put("url", url); rootMap.put("onChangePageFunc", onChangePageFunc); return rootMap; } get/set()…… } web.xml文件 \/tags\/page.tld \/WEB-INF\/pageTag.tld jsp页面引用 <%@ taglib uri="/tags/page.tld" prefix="p"%>