코더가 되고싶은 남자

[JSTL] DB에서 Select 문자열 데이터 <br> JSP 개행문자 적용 본문

jsp

[JSTL] DB에서 Select 문자열 데이터 <br> JSP 개행문자 적용

guney 2021. 7. 21. 16:45
반응형

웹 개발 프로젝트 진행 시 보통 DB 컬럼 내용글 중 개행문자가 \n로 저장되어있다.

 

그런데 이번엔 \n가 아닌 <br>로 저장 해놓겠다는 통보를 받았다.

 

"컬럼 내용<br>내용 내용내용";

 

위 내용대로 DB에서 그대로 화면까지 데이터를 가져와 뿌려주면 문자로 인식하여 <br>까지 화면에 출력된다.

 

<br>를 \n으로 치환 할 것이다.

 

DB에 저장된 해당 내용을 jsp 까지 가져와서 jstl 태그로 foreach돌려서 출력 할때  내용 중

\n -> <br> 로 바꾸면 개행문자가 적용 되던데

<br> -> \n로 바꾸면 줄바꿈이 안된다. -ㅅ -;;;

(java에서 <br>을 \n로 replaceAll로 가공해서 화면까지 가져와도 안됨)

 

이를 해결하기위해 두가지 방법을 사용했다.

 

- jsp파일 맨 위에 선언 -

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> //${fn:}을 사용하려면 선언해야함

<% 
   pageContext.setAttribute("ln", "\n");
   pageContext.setAttribute("br", "<br>");
%>

 

1. style 적용

//자바에서 가공한 colltInfoList 데이터

<c:forEach items="${colltInfoList}" var="item" varStatus="idx">
	<span style="white-space:pre"><c:out value="${fn:replace(item.colltPeriod, br, ln)}"></c:out></span>
    //style="white-space:pre" 스타일 먹여주면 된다.
</c:forEach>

 

 

2. <pre></pre> 태그 사용

//자바에서 가공한 colltInfoList 데이터

<c:forEach items="${colltInfoList}" var="item" varStatus="idx">
	<pre><span style="white-space:pre"><c:out value="${fn:replace(item.colltPeriod, br, ln)}"></c:out></span></pre>
</c:forEach>

 

3. 하지만 escapeXml="false"  이걸 쓰면 굳이 위에 것들을 안써도 된다.

<c:out value="${item.colltPeriod}" escapeXml="false"></c:out>

//escapeXml="false" 를 입력하면 문자열 내에 태그문자를 자동 인식하여 출력해줌(default는 true 상태)

 

내가 사용해본 결과 둘다 <br> -> \n로 치환해서 줄바꿈이 잘 적용된다.

하지만 <pre>태그로 내용을 감싸면 글자체가 바뀐다고 표현해야하나 ? 공백이나 글자 크기가 변형되어 출력된다.