[오류]

주문를 할 경우 아래와 같은 오류로  화면이 랜딩되지 않는 오류 발생

 

아래 더 오류를 보니 주문상태 값을 가져오지 못해 발생한 것을 알 수있었다

Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "T(jpabook.jpashop.domain.OrderStatus).values()" (template: "order/orderList" - line 16, col 33)
	at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393)
	at org.attoparser.MarkupParser.parse(MarkupParser.java:257)
	at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230)
	... 48 more

 

 

 

[오류 원인]

강의에서 html 부분은 복붙하여 사용하여 그대로 나도 복붙해서 사용했는데 경로가 달라서 발생하는 문제였다

복붙을 하더라도 한 번 확인했어야 하는 부분인데 시간을 너무 많이 잡아 먹었다.

여기서 사용한 T연산자는 Thymeleaf의 표현식인데 이렇게 풀경로를 적어서 왜 values() 메소드를 호출했는지 모르겠다.

그래서 T연산자를 사용하지 않고 불러오도록 수정하려고 한다.

 

[코드 수정]

1.컨트롤러에서 모델에 Enum 값 추가

먼저, OrderController 컨트롤러에서 OrderStatus enum의 values() 메소드를 호출하여 모든 enum 값을 가져온 후, 이를 orderList.html 뷰로 전달하기 위해 모델에 추가

model.addAttribute("orderStatuses", OrderStatus.values());

 

 

 

 

2. 컨트롤러에서 모델에 추가된 orderStatuses를 Thymeleaf 템플릿에서 사용하여 옵션을 생성

T연산자사용한 부분을 지우고 아래와 같이 수정해주었다

<option th:each=
                "status : ${T(jpabook.jpashop2.domain.OrderStatus).values()}"

수정 전

status : ${orderStatuses}

 

수정 후

 

3. 정상작동

+ Recent posts