예를 들어서, 질문이 6개이면 1페이지만 목록에서 나온다.
질문이 10개인순간에 2페이지가 생긴다.
페이지 생성하는 로직에서 단순한 계산 실수였다.
public List<Integer> makePages() {
int pageSize = 5;
int startPage = 1;
List<Integer> pages = new ArrayList<>();
for (int i = startPage; i < ((questionRepository.countAllByDeletedFalse() / pageSize) + 1) + startPage; i++) { // 5 is the size of a page
pages.add(i);
}
return pages;
}
예를들어 퀘스천 갯수가 32개라고 치고 pageSize
로 나누면 6이나오는데 페이지는 7까지가 있어야한다. 뒤에 +1을 안붙여줘서 문제가 있었다.
웹페이지에서 의도하던대로 동작하지 않으면 뭔가 크게 문제가 발생할거라고 생각이 나서 난 금방 지레 겁먹는것같다. 그냥 디버거도 사용해보고, 브라우저로 검사도 해보고 문제가없으면 로직을 보고,,그런식으로 차근히 접근해야겠다.
페이지가 0부터 시작하는거 해결하기 걍 검색하니까 바로 어떤 로직이 나와서적용
// Service
pageable = PageRequest.of(pageable.getPageNumber() <= 0 ? 0 : pageable.getPageNumber() -1
, pageable.getPageSize());
위 코드를 질문목록 얻어오는 메서드에 넣어주면 된다. 파라미터로 pageable을 넣고 return 해주면 된다.
좀 이해안가는 부분은 저 코드를 넣기전에는 첫번째 페이지가 url에서 page=0 이라고 나오는데 넣은 후에는 page=1 부터 시작한다. PageRequest.of()에서 자동으러 처리해주는 거 인거같은데..음.
그리고 -1 하는 부분이 이해가 안가긴하는데,,, 왜냐면 외부적으로 1페이지를 누른다고 치면 -1해서 0번째 페이지를 보여준다는 뜻인가?
페어프로그래밍하면서 내가 도움이 되는 게 없는거 같아 넘 좌절스러웠는데, 오늘 내 페어가 뭔가 안된다고 디엠이 와서..이번껀 내가 꼭 기필코 해결해서 돕고 말겠다는 심정으로 어떤 문제인지 알아보려고 했다.
답변하기 눌렀을때 전체 새로고침없이 등록되어 보였던게 안보인다고 했다.
먼저 답변하기를 누르면 콘솔에 500에러가 떠서 분명뭔가 문제가 있다곤 생각했는데 이전에 보고 따라했던 튜토리얼을 참고하면서 어떤 점이 문제가 있었을까 생각하면서 살펴봤는데 딱히 문제될게 하나도 없었다.
User,Answer 클래스에 각 필드에 JsonProperty도 잘붙어있고 script.js 에도 튜토리얼에 나오는대로 다 똑같이 적혀있었다.
그래서 내 페어가 이전에는 분명히 됐다고 말씀하셔서 이전 커밋으로 하나씩 체크아웃하면서 전부 테스트해봤다. 어느 지점에서 분명히 이게 작동해야하는데 커밋이 그 전 미션까지 갔는데도 작동하지 않았다.
이때 뭔가 이상하다고 생각해서 import.sql 에서 어플리케이션 실행하면서 넣어주는 데이터들을 다 지우고 회원가입-로그인-질문작성-답변작성 까지 해봤다. 이렇게 하니까 갑자기 잘 됐다.
그래서 그 앞 커밋으로 가서 또 해봤다. 잘 됐다.
이렇게 문제가 해결되서 짝에게 도움이 되어 엄청 기뻤다. ㅎㅎ
데이터를 뭔가 잘못 넣어줘서 이걸 웹(?)이 잘 처리해주지 못한다고 생각하긴 했는데, 뭐 잘 몰겠다 도움 됐다는 것만으로 만족한다.