springmvc-自定义标签-taglib

来源:互联网 发布:淘宝开性用品店 编辑:程序博客网 时间:2024/06/05 02:09

taglib并不仅仅适用于springmvc

1.web.xml中定义标签文件路径和自定义uri

<jsp-config>    <taglib>      <taglib-uri>http://www.tag.com/mytag</taglib-uri>      <taglib-location>/WEB-INF/tags.tld </taglib-location>    </taglib>  </jsp-config>

2.定义标签

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><short-name>mytag</short-name> <tag><name>pagination</name><tag-class>com.mvc.rest.common.utils.PaginateTag</tag-class><attribute><name>items</name><required>false</required><rtexprvalue>true</rtexprvalue><description><![CDATA[Reference the collection that will be retrieved.]]></description></attribute></tag><pre name="code" class="html"></taglib>

3.实现相应的tag

package com.mvc.rest.common.utils; import javax.servlet.http.HttpServletRequest;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspTagException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class PaginateTag extends TagSupport{  private static final long serialVersionUID = 150848338515348102L;  private final Log log = LogFactory.getLog(PaginateTag.class);  private String items;  public int doEndTag()    throws JspException  {    HttpServletRequest request = (HttpServletRequest)this.pageContext      .getRequest();    PaginatedList pList = (PaginatedList)request      .getAttribute(getItems());    String action = "";    if (pList.size() >= 1) {      writePage(pList.getPages(), pList.getCurrentPage(), pList        .getPageSize(), pList.getTotleCount(), action);      printJS();    }    return 6;  }  private void writePage(int pages, int currentPage, int pageSize, int records, String action)    throws JspException  {    try    {      JspWriter writer = this.pageContext.getOut();      StringBuffer content = new StringBuffer();      content.append("<table width='100%' class='tfoot'>");      content.append("<input type='hidden' name='ec_p' value='" + currentPage + "' />");      content.append("<input type='hidden' name='act' value='" + action + "' />");      content.append("<input type='hidden' name='ec_crd' value='" +         pageSize + "' />");      content.append("<td colspan='9'>");      if (currentPage <= 1) {        content.append("首页 上一页 ");      } else {        content.append("<a href=\"javascript:gotoPage('" + action + "','1','" +           pageSize + "');\">首页</a> ");        content.append("<a href=\"javascript:gotoPage('" + action + "','" + (          currentPage - 1) + "','" + pageSize +           "');\">上一页</a> ");      }      if (currentPage >= pages) {        content.append("下一页 尾页 ");      } else {        content.append("<a href=\"javascript:gotoPage('" + action + "','" + (          currentPage + 1) + "','" + pageSize +           "');\">下一页</a> ");        content.append("<a href=\"javascript:gotoPage('" + action + "','" + pages +           "','" + pageSize + "');\">尾页</a>");      }      content        .append(" 页次::<span class='red'>" + (        pages == 0 ? 0 : currentPage));      content.append("</span>/<span class='red'>" + pages + "</span>页 ");      content        .append("<SELECT name='selSize' onchange=\"javascript:gotoPage('" + action + "','1',this.value);\">");      if (!action.equals("mongo-historySercByXt.whbs?1=1")) {        content.append("<OPTION value='5'>5</OPTION>");        content.append("<OPTION value='10' selected>10</OPTION>");        content.append("<OPTION value='20'>20</OPTION>");        content.append("<OPTION value='50'>50</OPTION>");        content.append("<OPTION value='100'>100</OPTION>");      } else {        content.append("<OPTION value='1'>1</OPTION>");      }      content.append("</SELECT> 条/页  ");      content.append("共<span class='red'>" + records + "</span>条记录  ");      content        .append("转到第<SELECT name='selPage' style='width:60px;'onchange=\"javascript:gotoPage('" + action + "',this.value,'" +         pageSize + "');\">");      for (int i = 1; i <= pages; i++) {        content.append("<OPTION value=" + i + " " + (          i == currentPage ? " selected" : "") + ">" + i +           "</OPTION>");      }      content.append("</select> 页  ");      content.append("</td>");      content.append("</table>");      writer.print(content.toString());    } catch (Exception e) {      this.log.trace(e);      throw new JspTagException("PaginateTag: " + e.getMessage());    }  }  private void printJS()    throws JspException  {    try    {      JspWriter writer = this.pageContext.getOut();      StringBuffer content = new StringBuffer();      content.append("<SCRIPT language='JavaScript'>");      content.append("makeSizes();");      content.append("function gotoPage(path, page, pageSize) {");      content.append("document.all.act.value=path;");      content.append("document.all.ec_p.value=page;");      content.append("document.all.ec_crd.value=pageSize;");      content.append("document.pagination.submit();}");      content.append("function makeSizes() {");      content.append("var pageSize = document.all['ec_crd'].value;");      content.append("var sel=document.all['selSize'];");      content.append("for(var i=0; i<=5; i++) {");      content.append("if(sel.options[i] && sel.options[i].value==pageSize){");      content.append("sel.options[i].selected=true;");      content.append("break;}}}");      content.append("</SCRIPT>");      writer.print(content.toString());    } catch (Exception e) {      this.log.trace(e);      throw new JspTagException("PaginateTag: " + e.getMessage());    }  }  public String getItems() {    return this.items;  }  public void setItems(String items) {    this.items = items;  }}


4.引用和使用

<%@ taglib uri="http://www.tag.com/mytag" prefix="tagEx" %> 

传入相应参数即可
 <tagEx:pagination items=""></tagEx:pagination>


0 0
原创粉丝点击