我不知道为什么NumberFormatException在这里发生我想对文章总数进行分页并打印出来

问题描述

我要分页文章总数并打印出来。但是,在将变量总数存储在变量中的过程中继续发生错误

我不知道为什么在这里发生NumberFormatException。

我将totalCount保存为boardDAO,boardDTO中的整数变量。

如果我尝试将其放回list.jsp 29行的totalCount2 var中,

这种情况正在发生。

我该怎么办?

BoardDAO Class

public List<BoardDTO> boardPaing(int a,int b) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        List<BoardDTO> boardPaging = new ArrayList<>();
        
        int start = a;
        int pagePerCount = b;
    
        try {
            int tempcnt = 0;
            
            conn = DBconn.getConnection();
            String sql = "SELECT COUNT(b_idx) AS totcnt FROM tb_board";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            if(rs.next()){
                tempcnt = rs.getInt("totcnt");
                System.out.println(tempcnt);
            }
            
            sql = "SELECT b_idx,b_userid,b_name,b_title,b_content,b_hit,b_regdate,b_file FROM tb_board ORDER BY b_idx DESC limit ?,?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1,start);
            pstmt.setInt(2,pagePerCount);
            rs = pstmt.executeQuery();
            
            while(rs.next()) {
                BoardDTO board = new BoardDTO();
                board.setbIdx(rs.getLong("b_idx"));
                board.setbUserid(rs.getString("b_userid"));
                board.setbName(rs.getString("b_name"));
                board.setbTitle(rs.getString("b_title"));
                board.setbContent(rs.getString("b_content"));
                board.setbHit(rs.getInt("b_hit"));
                board.setbRegdate(rs.getString("b_regdate"));
                board.setbFile(rs.getString("b_file"));
                board.setTotalCount(tempcnt);
                System.out.println(board.getTotalCount());
                boardPaging.add(board);
            }
            
        }catch(Exception e) {
            e.printstacktrace();
        }finally {
            try {
                if(pstmt!= null) {pstmt.close(); }
                if(conn != null) {conn.close(); }
            }catch(sqlException e) {
                throw new RuntimeException(e.getMessage());
            }
        }
        return boardPaging;
    }

public class BoardDTO {
    private Long bIdx;
    private String bUserid;
    private String bName;
    private String bTitle;
    private String bContent;
    private int bHit;
    private String bRegdate;
    private String bFile;
    private int totalCount;
    
    
    public Long getbIdx() {
        return bIdx;
    }
    public void setbIdx(Long bIdx) {
        this.bIdx = bIdx;
    }
    public String getbUserid() {
        return bUserid;
    }
    public void setbUserid(String bUserid) {
        this.bUserid = bUserid;
    }
    public String getbName() {
        return bName;
    }
    public void setbName(String bName) {
        this.bName = bName;
    }
    public String getbTitle() {
        return bTitle;
    }
    public void setbTitle(String bTitle) {
        this.bTitle = bTitle;
    }
    public String getbContent() {
        return bContent;
    }
    public void setbContent(String bContent) {
        this.bContent = bContent;
    }
    public int getbHit() {
        return bHit;
    }
    public void setbHit(int bHit) {
        this.bHit = bHit;
    }
    public String getbRegdate() {
        return bRegdate;
    }
    public void setbRegdate(String bRegdate) {
        this.bRegdate = bRegdate;
    }
    public String getbFile() {
        return bFile;
    }
    public void setbFile(String bFile) {
        this.bFile = bFile;
    }
    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    
    
    
}
list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%-- <%@ page import="java.util.Date" %> --%>
<%-- <%@ page import="java.text.SimpleDateFormat" %> --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ include file="./sessionCheck.jsp" %>

<jsp:useBean id="boardDTO" class="com.koreait.board.BoardDTO"/>
<jsp:useBean id="boardDAO" class="com.koreait.board.BoardDAO"/>
<jsp:useBean id="today" class="java.util.Date"/> 
<fmt:formatDate var="todayStr" value="${today}" pattern="yyyy-MM-dd" />
<%-- <c:set var="boardList" value="${boardDAO.selectBoard()}"/> --%>
<c:set var="pagePerCount" value="5"/>
<c:set var="start" value="0"/>
<c:set var="pageNum" value="${requestScope.pageNum}"/>
<c:choose>
    <c:when test="${pageNum != null && !pageNum.equals('')}">
        <c:set var="start" value="${(pageNum-1) * pagePerCount}"/>
    </c:when>
    <c:otherwise>
        <c:set var="pageNum" value="1"/>
        <c:set var="start" value="0"/>
    </c:otherwise>
</c:choose>
<c:set var="pagingBoard" value="${boardDAO.boardPaing(start,pagePerCount)}"/>
<%-- <c:set var="temp" value="${pagingBoard}"/> --%>
<c:set var="totalCount2" value="${pagingBoard.totalCount}"/>   <%- this is error line- --%>
<c:set var="pageNums" value="${totalCount2 / pagePerCount + 1}"/>
<!DOCTYPE html>
<html>
<head>
<Meta charset="UTF-8">
<title>리스트</title>
</head>
<body>
    <h2>리스트</h2>
    <table border="1" width="800">
        <tr>
            <th>번호</th>
            <th>제목</th>
            <th>이름(아이디)</th>
            <th>날짜</th>
            <th>조회수</th>
        </tr>
        <c:forEach var="item" items="${pagingBoard}" varStatus="status">
        <c:set var="bReg" value="${item.bRegdate.substring(0,10)}"/>
        <tr>
            <td>${item.bIdx}</td>
            <td>${item.bTitle} <c:if test="${bReg.equals(todayStr)}"><img src='./images/new.png' alt='새글'></c:if>
            <c:if test="${item.bFile != null && !bFile.equals('')}"><img src='./images/file.png' alt='파일'></c:if>
            </td>
            <td>${item.bName}(${item.bUserid})</td>
            <td>${bReg}</td>
            <td>${item.bHit}</td>
        </tr>
        </c:forEach>
        <tr>
            <td colspan="5">
            <c:forEach begin="${start}" end="${pagenums}" var="i">
                <a href='list.jsp?pageNum=${i}'>${i} </a>
            </c:forEach>
            </td>
        </tr>
        <tr>
            <td colspan="5"><input type="button" value="글작성" onclick="location.href='./write.jsp'"> <input type="button" value="로그아웃" onclick="location.href='./logout.jsp'"></td>
        </tr>
    </table>
<%--    <p>${todayStr}</p> --%>
    <p>${start}</p>
    <p>${pageNum}</p>
</body>
</html>
// This is what I tested in the console window
15
15
15
15
15
15
10월 24,2020 11:53:36 오후 org.apache.catalina.core.StandardWrapperValve invoke
심각: 경로 [/Day10]의 컨텍스트 내의 서블릿 [jsp]을(를) 위한 Servlet.service() 호출이,근본 원인(root cause)과 함께,예외 [행 [29]에서 [/list.jsp]을(를) 처리하는 중 예외 발생

26: </c:choose>
27: <c:set var="pagingBoard" value="${boardDAO.boardPaing(start,pagePerCount)}"/>
28: <%-- <c:set var="temp" value="${pagingBoard}"/> --%>
29: <c:set var="totalCount2" value="${pagingBoard.totalCount}"/>
30: <c:set var="pageNums" value="${totalCount2 / pagePerCount + 1}"/>
31: <!DOCTYPE html>
32: <html>


Stacktrace:]을(를) 발생시켰습니다.
java.lang.NumberFormatException: For input string: "totalCount"
    at java.lang.NumberFormatException.forInputString(UnkNown Source)
    at java.lang.Integer.parseInt(UnkNown Source)
    at java.lang.Integer.parseInt(UnkNown Source)
    at javax.el.ListELResolver.coerce(ListELResolver.java:150)
    at javax.el.ListELResolver.getValue(ListELResolver.java:67)
    at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:125)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)
    at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:115)
    at org.apache.jsp.list_jsp._jspx_meth_c_005fset_005f7(list_jsp.java:636)
    at org.apache.jsp.list_jsp._jspService(list_jsp.java:227)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
    at org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(UnkNown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(UnkNown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(UnkNown Source)


解决方法

您正在尝试从totalCount获取"${pagingBoard.totalCount}"字段(List<BoardDTO>)。
您应该从totalCount列表中包含的一个对象中获取pagingBoard