에러&문제해결

페이지네이션 | "forward"가 null 입니다

보배 진 2025. 12. 10. 14:09

 

버튼 안 먹음 = 이벤트 바인딩 문제라고 생각을 했다

 

 

 

 

[로그] command : /ItemList.do 12월 10, 2025 12:47:12 오후 org.apache.catalina.core.StandardWrapperValve invoke 심각: 경로가 [/paginationPro]인 컨텍스트의 서블릿 [controller.common.FrontController]을(를) 위한 Servlet.service() 호출이 예외를 발생시켰습니다. java.lang.NullPointerException: Cannot invoke "controller.common.ActionForward.isRedirect()" because "forward" is null at controller.common.FrontController.doAction(FrontController.java:59) at controller.common.FrontController.doGet(FrontController.java:27) at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)

 

이런 에러가 발생했다

 

 

 

문제 원인을 보면

 java.lang.NullPointerException: Cannot invoke "controller.common.ActionForward.isRedirect()" because "forward" is null

어쩌고저쩌고 하는 부분이 있다

FrontController.java에서 forward.isRedirect()를 호출했는데, forward가 null이라는 뜻이다

 

왜 null일까?

ItemListAction.java에서 AJAX 요청 시 이렇게 한다

if ("true".equals(ajax)) {
    response.setContentType("application/json; charset=UTF-8");
    Map<String, Object> map = new HashMap<>();
    map.put("list", list);
    map.put("totalPage", dao.getTotalPage(limit));
    Gson gson = new Gson();
    response.getWriter().write(gson.toJson(map));
    return null;  // <--- 여기서 forward를 null로 반환
}


일반 요청이 아닌 AJAX 요청이면 ActionForward를 반환하지 않고 null을 반환

FrontController는 반드시 ActionForward를 호출하도록 작성되어 있어서 NPE 가 발생한다

즉, AJAX 요청일 때 FrontController가 null 체크 없이 forward를 바로 사용하려고 해서 문제가 발생한 것이다.

 

 

 

 

해결 방법

FrontController에서 null 체크

doAction()  안에서 forward가 null인지 확인 후, null이면 JSP 포워드 처리 안하도록 수정

 

ActionForward forward = action.execute(request, response);

if(forward != null){
    if(forward.isRedirect()){
        response.sendRedirect(forward.getPath());
    } else {
        request.getRequestDispatcher(forward.getPath()).forward(request, response);
    }
}
// null이면 AJAX 처리였으므로 아무것도 하지 않음

 

 

 

해결 완룡~~~