평범한 이야기

[오류] JSTL <c:choose> Error 를 만나다! 본문

컴퓨터 속 이야기/IT 기타

[오류] JSTL <c:choose> Error 를 만나다!

SophyBliss 2021. 1. 14. 22:45
반응형

오늘은 <c:choose> 태그를 적용하던 중 오류를 만났다. 

상황은 jsp 페이지에서 String 으로 append() 를 하여 html 을 출력하는 것이었다. 

받아오는 값 중에 null 일 경우 '-' 를 출력하고, 만일 null이 아니라면 받아 온 값을 출력하도록 <c:choose><c:when><c:otherwise> 태그를 활용하였다. 그런데! 분명 문제가 없어보임에도 아래와 같은 오류가 발생하였다.

 

1월 14, 2021 4:03:42 오후 org.apache.catalina.core.StandardWrapperValve invoke 심각: Servlet.service() for servlet [action] in context with path [] threw exception [Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path ....[중략]
</h3><p>114: Illegal text inside "c:choose" tag: ""; ...".</p>
<p>116: Illegal text inside "c:choose" tag: ""; ...".</p>
<p>122: Illegal text inside "c:choose" tag: ""; ...".</p>

혹 <c:choose>태그가 String 으로 묶기 위해 사용한 "" 를 인식을 못하는 것인가 하여 '' 로 바꾸어 적어보기도 하였지만, 

해결되지 않았다. 그래서 <c:choose>태그 속에 ""가 없도록 아예 하나의 String " "안에 <c:choose>태그에 속하는 모든 문장을 담아 실행을 해보았다. 오!!!!

 

정상적으로 실행이 되는 것을 확인하였다. 

흠..... 검색도 해보고 옆에 계신 대리님께도 여쭤보았지만, 결론은 " " 을 잘못된 text로 인식하는 것으로 생각이 된다....

 

아래는 오류가 발생했던 방식이다. " " 에서 ' ' 로 바꿔 봤을 때 문장.

[오류발생 사례1]
addHtml +=' <c:choose> ';
addHtml +='         <c:when test="${item.value ne null }"> ';
addHtml +='                 <td class="ac">${item.value}</td> ';
addHtml +='         </c:when> ';
addHtml +='         <c:otherwise> ';
addHtml +='                 <td class="ac"> - </td> ';
addHtml +='          </c:otherwise> ';
addHtml +=' </c:choose>

정상 실행이 되었을 때 방식은 아래와 같다.

[오류해결 사례]
addHtml +=' <c:choose><c:when test="${item.value ne null }"><td class="ac">${item.value}</td></c:when><c:otherwise> <td class="ac"> - </td></c:otherwise></c:choose> ';

' ' 안에 <c:choose> 태그의 내용을 모두 적었더니 정상실행이 되었다.

그런데 마지막으로 한 번 더 시도해본 더하기 방식도 오류가 발생하였다. 내용은 아래와 같다. 

[오류발생 사례2]
addHtml +=' <c:choose>'
                  + '<c:when test="${item.value ne null }">'
                  + '<td class="ac">${item.value}</td>'
                  + '</c:when>'+ '<c:otherwise>'
                  + '<td class="ac"> - </td>'
                  + '</c:otherwise>'+ '</c:choose>';
Illegal text inside "c:choose" tag: "'+ 
  ...".</p><p>122: Illegal text inside "c:choose" tag: "'+ 
  ...".</p><p>128: Illegal text inside "c:choose" tag: "'+

검색을 해보면서 <c:choose> 태그의 비슷한 오류들이 많다는 것을 알 수 있었다.

츄즈 요녀석!

반응형