땃지
ing
땃지
전체 방문자
오늘
어제
  • 분류 전체보기 (100)
    • 공부 (37)
      • Java (4)
      • Spring Boot (4)
      • 자료구조 (4)
      • CS (18)
      • JSP (6)
      • Git (1)
    • 문제 해결 (60)
      • 백준 (51)
      • 프로그래머스 (9)
    • 프로젝트 (3)
      • 당신의 안목 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Contact

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
땃지
공부/Spring Boot

Thymeleaf null체크

2022. 8. 17. 14:10

문제

//생략

<p class="placeName" th:text="${place.name}"></p>
<p class="placeAddress" th:text="${place.address}"></p>

//생략

메인페이지 html 코드 중간에 다음과 같이 팝업 안에 값을 넣어주는 부분이 있었다.

 

해당 페이지를 위한 Controller에서

@RequestMapping("/place/{id}")
    public String placeDetail(Model model, @PathVariable(value="id")Integer id){
    Place place = this.placeService.getPlace(id);
    model.addAttribute("place", place);
    return "main";
}

url에 들어있는 value를 이용해 Place 객체를 받아올 수 있도록 했는데

나는 id값이 있을 때, 없을 때 모두 메인페이지를 정상적으로 출력하고 싶었지만

id값이 없는 root url에서는 메인 페이지에서 오류가 발생했다


원인

받아오는 id값이 없어 place.name, place.address 등 객체에 대한 값들이 null일 경우에 대해

어떤 식으로 코드를 작성해주어야 할 지 몰라 값이 있을 경우의 코드만 작성해둔 것이 오류의 원인같다


해결

서칭을 하면서 thymeleaf의 null 처리에 대해 알게되었고 사용법은 다음과 같다

${객체명?필드명}

 

 

위 코드를 내 경우에 대입하면 

//생략

<p class="placeName" th:text="${place?.name}"></p>
<p class="placeAddress" th:text="${place?.address}"></p>

//생략

 

null 처리 부분 코드를 풀어서 쓰면 일종의 삼항연산자와 같아진다

${place != null ? place.name : ""}

매개변수인 id가 null일 경우 id를 통해 받아오는 place 객체 또한 비어있게 되므로

객체가 null이 아니라면 place.name 값을 가져다 사용하고

객체가 null이라면 "" 빈 문자열이 들어가도록 하는 것이다.

 

저작자표시 비영리 변경금지 (새창열림)
    '공부/Spring Boot' 카테고리의 다른 글
    • [에러] No serializer found for class -org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer
    • @Value 어노테이션 환경변수 오류
    • 프로젝트 시작하기
    땃지
    땃지

    티스토리툴바