문제
//생략
<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이라면 "" 빈 문자열이 들어가도록 하는 것이다.