메인페이지와 bookshelf 페이지를 완성한 후 게시글을 저장하고 수정하는 view를 만들었다
추가로 게시글 저장후 해당 책이름을 선택하면 책 후기를 볼 수 있는 Review 화면으로 이동하는 것까지 구현했다.
이후 실제로 작동을 할 수 있게 index.js를 만들어서 save,update,delete 기능을 추가했다
1. 게시글 저장 View
먼저 templates 패키지에 bookshelf-save.mustache 파일을 생성했다
관련 코드는 다음 링크에 가면 확인할 수 있다.
https://github.com/heyazoo1007/bookproject/blob/master/src/main/resources/templates/bookshelf-save.mustache
이 단계에서 발생한 문제:
-카테고리를 정수값으로 설정했을 때 코드가 복잡해짐
원인:
처음에는 카테고리를 정수로 받아서 db에 입력하고, 그걸 불러올 때 정수에 해당하는 카테고리를 표시하려고 했으나,
코드가 복잡해질 것 같았다
해결:
카테고리도 문자열로 변경후 입력된 문자열을 그대로 저장하고 불러오는 구조로 만들었다
-책 저장시 입력된 카테고리값이 db에 반영되지 않는 오류
원인:
카테고리는 다른 항목들과는 다르게 selectbox로 이루어져있기 때문에 index.js에 따로 설정을 해주어야한다
해결:
index.js에 category항목에 변형을 주었더니 해결되었다
자세한 건 다음 링크를 참조하면 된다
https://heyazoo1007.tistory.com/185
2. 등록 기능 index.js에서 구현하기
save 화면만 만든다고 해서 게시글을 등록할 수 있는 것은 아니다. 실제로 데이터베이스에 등록할 수 있게 resource/static\js\app 패키지를 만들어 index.js 파일을 만든다
해당 코드는 다음 링크를 통해 확인 할 수 있다.
https://github.com/heyazoo1007/bookproject/blob/master/src/main/resources/static/js/app/index.js
작성하면서 주의해야할 점
-오타,괄호 짝 맞는지 확인
: 이거때문에 오류도 많이나고, 고생도 많이 했기 때문에 조심해서 코딩하면 좋을 것 같다
그럼에도 오류가 발생한다면 8080포트로 프로젝트 실행후 브라우저에서 f12를 누른 후 콘솔창에 출력된 오류와 오류 위치를 확인해서 문제를 해결하면 된다
3. 책 이름 선택 시 Book Review로 이동하기
선택한 책의 정보를 구체적으로 볼 수 있는 BookReview 페이지를 만들고 책 이름을 눌렀을 때 이동하게 만들었다.
먼저 templates 패키지에 bookshelf-id.mustache 파일을 생성했다
여기서 id는 책에 주어진 id로 id를 기준으로 책 정보를 불러온다
여기서 발생한 문제:
-저장된 책이름 클릭시 책 후기를 불러올 수 없다는 오류( no method or field name 'review')
원인:
Book Review로 이동한 뒤 db에서 review에 해당하는 내용을 가져와야하는데 repository,service,index controller에서 불러오는 메소드가 없어서 발생했다
해결:
repository,service,index controller에 findReview() 메소드를 생성했더니 오류가 해결되었다
-게시글 2개 이상 일때 query did not return a unique result:2 오류
원인:
처음에는 db에 저장된 데이터를 어떻게 불러오는지 몰라서 책을 보고 따라했다. 책에서는 db에 저장된 전체 게시글만 불러왔기 때문에 findAllDesc()라는 메소드를 사용했다.
나도 그걸 그대로 사용하다보니 책이 1개만 있을 경우 전체 내용도 하나이므로 책이름을 클릭 했을 때 전체 책(1개)의 정보가 불러와졌다
그런데 책을 2개이상을 만들다보니 Book Review 페이지로 이동시 하나의 아이디에 전체 책 정보가 불러와지니까 unique result를 반환할 수 없었던 것 같다.
해결:
findAllDesc()를 삭제하고, findById로 수정하니 unique 값이 불러와져서 문제가 해결되었다
바로 위의 문제에서도 findById()로 다 해결이 되어서 findByReview()도 삭제 했다
이 오류를 통해서 원하는 정보를 불러오는 것에 대해 자세하게 생각해야하고, controller,service,repository 모두 이용해야하는 것을 배웠다
- Id is null 오류
원인:
index controller bookshelfId()에서 id로 액세스 할 수가 없어서 발생했다
해결:
@Pathvariable id 파라미터를 추가했더니 해결되었다
저장된 정보 불러오는데에는 @Pathvariable id 사용하기