2011-08-10 10 views
3

JSTL에 변수가 있고 모든 쉼표를
으로 바꾸려고합니다.JSTL은 변수의 문자를 HTML 태그로 대체합니다.

<c:set var="colTxt" value="${fn:replace(colTxt,',','<br />')}" /> 

그러나 다음과 같은 오류가 표시됩니다.

The value of attribute 'value' associated with an element type "c:set" must not contain the '<' character

이 문제를 해결하려면 어떻게해야합니까?

+0

이 예제는 Tomcat 6.0.32 (web.xml은 서블릿 사양 2.5를 지정)에서 오류를 생성하지 않습니다. 오류가 발생하는 컨테이너에 대한 세부 정보를 제공 할 수 있습니까? –

+1

@ jt. JSPX 나 Facelets 같은 XML 기반의 뷰 기술을 사용하는 경우에만이 오류가 발생합니다. 그런 다음 "일반 바닐라"로 사용 된 XML 특수 문자를 이스케이프해야합니다. 이러한 문자 중 5 개만 있습니다. http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML – BalusC

답변

4

<> 대신 &lt;&gt;을 사용하십시오.

<c:out>을 사용하여 인쇄 할 경우 escapeXml="false"을 추가해야합니다. 그렇지 않으면 <br />이 실제 HTML 줄 바꿈으로 해석되는 대신 문자 그대로 표시됩니다.

그러나 사용자가 제어하는 ​​입력이 ${colTxt} 인 경우 XML 이스케이프를 사용하지 않으면 잠재적으로 XSS 홀이 생성 될 수 있습니다. 문제를 다르게 해결할 수도 있습니다.

<c:forEach items="${fn:split(colTxt, ',')}" var="item"> 
    <c:out value="${item}" /><br /> 
</c:forEach> 
+0

아, 마침내. c : out에 escapeXml을 false로 설정해야했습니다. 조금 더러워 보입니다. 이것을 달성하기위한 더 좋은 방법이 있습니까? – Hedge

+1

답변 업데이트를 참조하십시오. – BalusC

+0

이 문제를 해결하는 훨씬 좋은 방법이 있습니다. 고맙습니다. – Hedge

관련 문제