게시판 제작 수업중 컨트롤러에서 웹페이지로 보낸 model이 ajax에 도착하지 못해 페이지는 바뀌었는데 게시글이 바뀌지않는 문제가 생겼다
먼저 웹에서 list 사이트에 접근하면 웹페이지가 실행되고, 웹페이지에서
document.ready가 되었을 때 ajax가 실행되어 화면에 게시글이 보이게 된다.
컨트롤러에서 찍어본 cri 데이터
페이징된 3을 눌렀을 때
클릭됐을 때 list로 보내주는데 스프링에서는 데이터를 자동으로 매핑해준다
때문에 위 콘솔에 뜬 웹에서 받아온 크리에는 단순히 pageNum에 3이라는 값이,
amount에 10이라는 값이 저장되는 것.
그래서 컨트롤러에서 받아온 cri 로 생성자를 만들어 줬다.
다시 돌아가서, 이 과정을 통해 내린 결론을 내렸다. 웹에서 보낸 결과를 ajax에서 받지못한다.
하여 차근차근 코드를 살펴보니, js 부분에서 받아오는 data가 없는걸 확인했다!
data 역시 위에서 말했다시피 스프링이 컨트롤러에 명시된 Criteria로 자동으로 매핑해주기때문에 이렇게 수정하면 그렇게 골머리를 썩히던 컨트롤러에서 ajax로 데이터 보내기를 할 수 있게 된다.
의존성을 주입하기 위해 다시한번 컨트롤러를 원상복구시키고 작동해봤다! 하지만 이러면 컨트롤러가 동작하지않는다!
이 부분에서 Criteria가 잘못 짜여졌구나 라는걸 깨달았다. 전달값이 cri에서
같은 값으로 넘어온다는 사실을 깨닫고 왜 이런 일이 발생하는건지, 이곳저곳 구글링해보기 시작했다.
그러다가 찾아낸 글이다!
https://stackoverflow.com/questions/18139678/lombok-how-to-customise-getter-for-boolean-object-field
간단하게 요약하면 boolean 타입의 getter는 Is로 생성되는데, 스프링은 getXxx만 읽을 수 있다고한다.
또한 cri의 생성자는 웹 페이지가 생성됐을때만 한번 생성되고 그 이후로는 만들어지지않고 있었다!
결론은 웹페이지가 호출되었을 때만! 그때만 생성자가 한번 호출되고 그 이후로는 new로 만들어지는 과정이 없었기 때문에 start 값이 변하지않고있던것이었다.
해서 start에 getter를 만들어줘서 ajax로 보낸 값을 받아올 수 있도록 수정해줬다.
start 값이 수정되고, 게시판의 페이징이 구현됐다.