用自定义标签报空指针异常:求高手指点:
<?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.0</jsp-version>
<short-name>pageTag</short-name>
<uri>http://org.web.ssh</uri> <tag>
<name>page</name>
<tag-class>com.util.PageTag</tag-class>
<body-content>tagdependent</body-content>
<attribute>
<name>page</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>com.util.PageUtil</type>
</attribute>
</tag></taglib>
jsp页面:<pageTag:page page="${page}"/>
web.xml配置:<!-- 自定义标签配置 -->
<jsp-config>
<taglib>
<taglib-uri>http://org.web.ssh.pageTag</taglib-uri>
<taglib-location>/WEB-INF/tlds/pageTag.tld</taglib-location>
</taglib>
</jsp-config>

解决方案 »

  1.   

    java分页标签代码:public class PageTag extends SimpleTagSupport {
    private PageUtil<?> page; public PageUtil<?> getPage() {
    return page;
    } public void setPage(PageUtil<?> page) {
    this.page = page;
    }
    public void doTag() throws JspException, IOException {
    JspContext jspContext = this.getJspContext();
    JspWriter out = jspContext.getOut();
    if (page.getPagetotalRec() == 0) {
    out.println("没有记录");
    } else {
    long pageNo = page.getPageNo();
    long totalPage = page.getPagetotalRec();
    long pageSize = page.getPageSize();
    String queryCase = page.getQueryCase();
    String url = page.getUrl(); // 共有多少页
    long pageCount = totalPage / pageSize+ ((totalPage % pageSize) > 0 ? 1 : 0); long iStart = pageNo, iNext;
    iStart = (iStart < 1) ? 1 : iStart;
    iNext = iStart + 9;
    iNext = (iNext > pageCount) ? pageCount : iNext;
    iStart = iNext - 9;
    iStart = (iStart < 1) ? 1 : iStart; String pageStr = "共有" + pageCount + "页/"+totalPage+"条"+"&nbsp;&nbsp;&nbsp;&nbsp;"; String urlStr = ""; if ((iNext > 0) && (pageNo > 1)) {
    if (queryCase != null && !"".equals(queryCase)) {
    pageStr += "<a href=\"" + url + "&pageNo=" + (pageNo - 1)
    + "&pageSize=" + pageSize + queryCase
    + "\"  title=\"上一页\">上一页</a>&nbsp;";
    } else {
    pageStr += "<a href=\"" + url + "&pageNo=" + (pageNo - 1)
    + "&pageSize=" + pageSize
    + "\"  title=\"上一页 \">上一页</a>&nbsp;";
    } }
    for (; iStart <= iNext; iStart++) {
    if (iStart == pageNo) {
    pageStr += "&nbsp;" + iStart + "&nbsp;";
    } else { if (queryCase != null && !"".equals(queryCase)) {
    pageStr += "<a href=\"" + url + "&pageNo=" + iStart
    + "&pageSize=" + pageSize + queryCase
    + "\" title=\"第" + iStart + "页\">[" + iStart
    + "]</a>&nbsp;";
    } else {
    pageStr += "<a href=\"" + url + "&pageNo=" + iStart
    + "&pageSize=" + pageSize + "\" title=\"第"
    + iStart + "页\">[" + iStart + "]</a>&nbsp;";
    }
    }
    } if ((iNext > 0) && (pageNo < iNext)) {
    if (queryCase != null && !"".equals(queryCase)) {
    pageStr += "<a href=\"" + url + "&pageNo=" + (pageNo + 1)
    + "&pageSize=" + pageSize + queryCase
    + "\" title=\"下一页\">下一页</a>&nbsp;";
    } else {
    pageStr += "<a href=\"" + url + "&pageNo=" + (pageNo + 1)
    + "&pageSize=" + pageSize
    + "\" title=\"下一页\">下一页</a>&nbsp;";
    }
    } out.println(pageStr);
    }
    }}异常:
    012-6-19 20:41:40 org.apache.catalina.core.ApplicationDispatcher invoke
    严重: Servlet.service() for servlet jsp threw exception
    java.lang.NullPointerException
    at com.util.PageTag.doTag(PageTag.java:25)
    at org.apache.jsp.authority.functionlist_jsp._jspx_meth_pageTag_005fpage_005f0(functionlist_jsp.java:483)
    at org.apache.jsp.authority.functionlist_jsp._jspService(functionlist_jsp.java:166)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:157)
      

  2.   

    25行是这一行:
    if (page.getPagetotalRec() == 0) {
    out.println("没有记录");
    但是我附上值了
      

  3.   

    page 必然是null。你可以在JSP中尝试直接输出下page对象来看看。
    <p>${page}</p>
      

  4.   

    我用的ssh   spring2.5 和struts2 和hibernate 3.3  用struts1.3时可以的
      

  5.   

    不加分页时:用这个可以: <c:forEach items="${pageUtils.list}" var="pageUtil">
                                            
                       
                                                  <tr>
                                                  <td>${pageUtil.functionId}</td>
                                                  <td>${pageUtil.functionName }</td>
                                                  <td>
                                                   <c:if test="${pageUtil.functionIsleaf==1}">
                                                   <c:out value="是"></c:out>
                                                   </c:if>
                                                   <c:if test="${pageUtil.functionIsleaf==0}">
                                                   <c:out value="不是"></c:out>
                                                   </c:if>
                                                  </td>
                                                  <td>
                                                   <c:if test="${pageUtil.functionStatus==1}">
                                                   <c:out value="可用"></c:out>
                                                   </c:if>
                                                   <c:if test="${pageUtil.functionStatus==0}">
                                                   <c:out value="已冻结"></c:out>
                                                   </c:if>
                                                  </td>
                                                
                                                 
                                                  </tr>
                                              
                                             </c:forEach>
      

  6.   

    加上 <pageTag:page page="${page}"/>就报空指针