작성
·
58
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
<p th:text="'Status 값: ' + ${param.status}"></p>
<div>
<h2 th:if="${param.status}" th:text="'저장 완료!'"></h2>
<h2 th:if="${param.status == 100}" th:text="'수정 완료!'"></h2>
</div>
스테이터스 값이 true일때 저장완료 100일때 수정완료 출력하려고 하는데 url링크에 스테이터스가 100이고 개발자모드 페이로드에도 100으로 되어있는데 저장 완료라고 나옵니다
<h2 th:if="${param.status}" th:text="'저장 완료!'"></h2> 이 코드를 삭제하고
<p th:text="'Status 값: ' + ${param.status}"></p>
값이 100으로 찍혀도 수정 완료가 안떠요
<p th:text="'Status 값: ' + ${param.status}"></p>이 100이어도 저장완료라고 나오는 오류도 있습니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
우호적인 생쥐님, 주신 코드에서 타임리프의 th:if
조건에 대한 문제를 다루겠습니다. 질문하신 부분은 URL의 쿼리 파라미터로 전달된 param.status
값을 기준으로 서로 다른 메시지를 출력하고자 하는데 원하는 결과가 나오지 않는 상황입니다.
타임리프에서는 요청 파라미터가 기본적으로 문자열로 처리됩니다. 따라서 숫자로 비교할 때는 문자열로 변환된 상태에서 비교가 이루어지기 때문에 문제가 발생할 수 있습니다. 예를 들어 숫자와 등호(==)를 사용하여 비교하면 예상치 못한 결과가 나타날 수 있습니다.
문자열 비교: 주어진 값이 “100”인지 확인하기 위해 문자열(“100”)로 비교해야 합니다.
수정해야 할 부분은 th:if
조건문에서 param.status
값을 문자열 “100”과 비교하는 방식입니다. 아래처럼 수정해 보세요:
<h2 th:if="${param.status == 'true'}" th:text="'저장 완료!'"></h2>
<h2 th:if="${param.status == '100'}" th:text="'수정 완료!'"></h2>
그리고 th:text
속성에서 추가적으로 확인할 부분은 'Status 값: '
와 ${param.status}
를 연결하는 부분입니다. 타임리프에서 문자열 연결은 +
연산자 대신 | |
를 사용할 수 있습니다. 다음과 같이 표현하면 됩니다:
<p th:text="'Status 값: ' + ${param.status}"></p>
위 예시에서는 param.status
가 문자열로 처리되지 않아서 문제가 발생할 수도 있으니 타임리프 표현식을 사용하여 안전하게 비교할 수 있도록 위의 HTML 코드를 이용해 보세요.
아래의 링크에서 비슷한 문제를 다룬 답변을 확인하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
<p th:text="'Status 값: ' + ${param.status}"></p>
<div>
<h2 th:if="${param.status == 'true'}" th:text="'저장 완료!'"></h2>
<h2 th:if="${param.status == '100'}" th:text="'수정 완료!'"></h2>
</div>
답변대로 코드를 변경했는데 뷰페이지에 status값이 100이나 true는 출력되지만
저장완료 혹은 수정완료는 출력이 안됩니다