리포지토리의 모든 글을 삭제하여, 글이 비어있을 때 <th:if>
를 통해서 화면을 구분하고자 했다.
근데 아무리 해도 null이 안잡히는 것 같아서, 테스트 코드를 돌려보았다.
@Test
void repositoryNull() {
Article article1 = new Article("제목입니다", "글입니다");
Article article2 = new Article("제목임", "글임");
repository.save(article1);
repository.save(article2);
repository.delete(1L);
repository.delete(2L);
assertThat(repository.findAll()).isNull();
}
결과는 다음과 같다.
ConcurrentHashMap()
)가 지정되어있기 때문이다.Empty
상태이다. 그래서 isEmpty()
로 검증한 결과 테스트를 통과했다.아직은 구분이 많이 헷갈린다. Null과 Empty의 상태는 다르니 항상 주의하자.
그리고, 이게 왜 되지..? 싶은 일이 발생했다.
thymeleaf에 전달된 객체가 null이면 글이 없다고 메세지를 출력하고 싶어서 뷰 템플릿에 다음과 같이 작성해두었다.
<div th:if="${articles} == null" th:text="'작성된 글이 없습니다.'"></div>
그리고, model.addAtrribute("articles", null);
이라고 코드를 작성해서, 타임리프에서 잡을 수 있도록 null을 일부러 모델에 넘겨주었다.
그런데, 아무리 해도 안되는 것이다. 글이 없다는 메시지가 출력되지 않는 것이었다.
그래서, redirection에 쿼리 파라미터를 넘겨서 해결해보려다가, 리디렉션 횟수가 너무 많다는 오류 메세지가 출력되는 현상을 맞이하였다.
이건 아닌거 같다는 생각에, 일단 home 뷰로 보내서 브라우저를 진정시키고 다시 생각해보자는 마음에 다음과 같이 코드를 바꿨다.