질문 목록 템플릿 구현 (Thymeleaf 사용)

Ryu·2023년 3월 30일
0

참고). 오류 코드 정리

404 ⇒ 브라우저가 요청한 페이지를 찾을 수 없다.

  • URL 매핑이 잘 되어 있는지.
  • 대부분 URL 잘못 입력했을 확률이 높다.

500 ⇒ Controller 의 함수는 호출되었지만 , 결과값을 리턴해야 하는 함수에서 아무런 값도 리턴하지 않음.

  • 클라이언트로 리턴 값을 응답해야 해결됨.

[ 질문 목록과 템플릿 ]


미션 :

타임리프, layout-dialect 라이브러리 추가
질문목록 페이지(question_list.html 구현), ‘표’로 구현하기(제목과 작성일시만 나오게끔.)
컨트롤러를 통해 질문목록 데이터 전달.

html
table>(thead>tr>th*2)+(tbody>tr>td*2)
구현내용
- InitService -> InitDb 에서 초기 데이터 생성.
- question_list.html 표 구현, 모델에서 받은 데이터로 화면 출력.

타임리프를 사용하려면, 다음과 같이 라이브러리를 추가해야 합니다.(타임리프, layout-dialect)

dependencies {
    **implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'**
    **implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'**
}

Question에서 ‘생성일’ 필드는 BaseEntity 에 위임했는데, 어떻게 가져오는걸까 ?

BaseEntity 의 @Getter, @Setter 를 통해 생성된 메서드들과 모든 필드들을 ‘상속’받기 때문에 사용할 수 있는 것이다.
참고로, 생성일은 setter 로 세팅할 수 있지만, 그렇게 하지 않는다.

@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
	...
}
@SpringBootApplication
@EnableJpaAuditing
public class SbbApplication {
	...
}
  • 다음과 같이 @EnableJpaAuditing 을 넣어주는 것으로 쉽게 해결할 수 있다.

다음은 자주 사용하는 타임리프 속성에 대해 알아본다.

자주 사용하는 유형은 크게 3가지가 있다.

  1. 분기문 속성
    질문 객체가 null 이 아닌 경우에 해당 엘리먼트가 보이게 해주세요.
    ```java
    th:if = "${question != null}"
    ```
  2. 반복문 속성
    질문 목록에 대해 반복문으로 작성해주세요.
    ```java
    th:each = "question, loop : ${questions}"
    ```
    
    - loop 를 통해 다음과 같은 속성들을 사용할 수 있다.
        - loop.index - 반복 순서, 0부터 1씩 증가
        - loop.count - 반복 순서, 1부터 1씩 증가
        - loop.size - 반복 객체의 요소 갯수 (예: questionList의 요소 갯수)
        - loop.first - 루프의 첫번째 순서인 경우 true
        - loop.last - 루프의 마지막 순서인 경우 true
        - loop.odd - 루프의 홀수번째 순서인 경우 true
        - loop.even - 루프의 짝수번째 순서인 경우 true
        - loop.current - 현재 대입된 객체 (예: 위의 경우 question과 동일)
  3. 텍스트 속성
    질문의 제목을 출력해주세요.
    ```java
    th:text = "${question.subject}"
    ```
    
    ```java
    <td>[[${question.subject}]]</td>
    ```
    
    - 다음과 같이 th:text 를 쓰지 않고 대괄호를 이용해서 출력할 수도 있다.

에러). 스프링 부트 버전 오류

spring.jpa.hibernate.ddl-auto=update update 가 안되는 오류

  • spring.jpa.hibernate.hbm2ddl.auto=update 이렇게 바꿔주니 해결… 스프링 부트 버전으로 인한 오류인 것 같다.

에러). 자주 틀리는 문제, 템플릿 파싱 에러

  • 원인 : 또 template parsing error. Question 의 필드명 createdDate 로 해놨다…
  • 해결 : 교안의 template 에서는 createDate 로 되어 있다.

에러). 템플릿 경로 문제.

  • Error resolving template [question_list], template might not exist or might not be accessible by any of the configured Template Resolvers
  • templates/question/question_list.html 에 있는데, return “question”; 이라고만 해서 오류 발생.

에러). ddl-auto 문제

  • 원인 : createDate 라고 수정했지만, 기존에 만들어 둔 테이블 명은 ddl-auto : create 가 아니라서 , 수정이 되지 않았다는 점.
profile
Strengthen the core.

0개의 댓글