글쓰기 매커니즘을 전부 만들고 나서 오류를 발견했다.
writeForm.do를 치면 게시글쓰기 창이 잘 들어가지나,
내용을 전부 입력하고 글 작성을 눌러도 미동을 하지 않았다.
처음에는 자바스크립트의 문제인 줄 알았다.
$().ready(function(){
$("#submit").on("click",function(){
if(validate()){
alert("validate = true");
$("form").submit();
}
})
})
그러나 submit 바로 위에 alert창을 띄워도 정상적으로 작동된다.
문제는 submit이다.
<form name="writeform" action="writeAction.do" method="post">
form 태그의 action은 writeAction.do를 향하고 있고,
/list.do=action.ListAction
/writeForm.do=action.WriteFormAction
/writeAction.do=action.WriteAction
Command.properties 문서에도 writeAction.do가 멀쩡하게 있다.
writeForm.do는 정상적으로 작동하기 때문에 properties와의 연결 문제도 아니다.
주소창에 writeAction.do를 직접 입력하면 dp가 null이라는 오류가 뜬다.
controller가 doGet 메소드에서 다른 페이지로 이동시키는 requestDispatcher의 변수 dp가 null인 오류다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String view = null;
CommandAction com = null;
try {
String command = request.getRequestURI();
if(command.indexOf(request.getContextPath())==0) {
command = command.substring(request.getContextPath().length());
}
com = commandMap.get(command);
System.out.println(com);
view = com.requestProc(request, response);
System.out.println(view);
} catch(Exception e){
e.printStackTrace();
}
RequestDispatcher dp = request.getRequestDispatcher(view);
dp.forward(request, response);
}
콘솔창을 살펴보니, requestDispatcher 이전에 com 변수가 null임을 발견했다.
입력된 주소의 뒷부분을 잘라 command 문자열에 넣고,
commandMap 이라는 해쉬맵에 문자열 key가 command인 value를 찾아 com에 넣는 방식이다.
어디까지 작동하고 어디부터 안 되는 것인지 정확하게 파악하기 위해
우선 콘솔창에 로그를 기록하도록 했다.
첫 번째 반복 성공
두 번째 반복 성공
그러나 세 번째가 나오지 않는다.
writeAction.do도 있어야 하는데?
콘솔창을 확인한 결과 command까지는 제대로 나오는 것을 확인할 수 있었다.
그러나 writeAction.do를 넣어도 commandMap이라는 해쉬맵에서 command key에 따른 value를 불러오지 못했다.
맙소사 오타였다.
파일 이름을 수정하고 나니 이제 세 번째 반복까지 잘 나온다.
그래도 여전히 dp는 null이고
WriteAction 클래스에 String에 빈칸이 들어가는 것이 문제인 것 같다.
parseInt를 사용한 아래 부분이 문제인 것 같은데,
이 부분은 답글일 경우 원래의 bno, bref, bstep, blevel을 불러와 넣어주는 곳이다.
writeForm에서 hidden으로 넣어줬으니 writeForm 문제는 아닐 것 같은데.
조건을 너무 부족하게 써서 새글일 때에도 dto에 정보를 저장하려고 하는 것일까?
조건을 한 줄 더 추가해보았다.
드디어 페이지가 넘어갔다!
결론
파일 이름을 복사해서 사용하는 것과,
조건을 정확하게 주는 것의 중요성을 느꼈다.