220323 [bug] : 줄바뀜이 읽기/수정 폼에서 적용이 안되는 문제
문제점
피드를 입력 시 줄바뀜을 적용하는 경우가 있다. 이 경우 피드를 읽고/수정할때도 이전에 적용한 줄바뀜이 적용되어야 하는데 적용이 되지 않는다.
입력을
안녕하
세요
라고 했으나, 생성 후 읽기 페이지에 들어가면
안녕하 세요
라고 나옴. 줄바뀜이 적용이 안된다.
디버깅
디버깅을 통해 입력 페이지에 입력한 문자가 model로 어떤 형태로 전달되어 DB에 저장되는지 확인해 보았다.
안녕\r\n하세요 라고 model 객체에 content 데이터가 전달된 것을 볼 수 있다.
content는 String 객체이다보니 줄바뀜을 \r\n으로 작성하는 것 같은데, 이게 html 문서에서는 줄바뀜으로 인식하지 못해 생기는 문제인것 같다. 또한 DB의 TEXT타입또한 인식하지 못하는듯 한다. (mySQL 접속 후 확인해 보니 줄바뀜 처리가 안됨)
해결
DB에 저장하는 과정에서 줄바뀜을 HTML문서가 이해할 수 있는 형태로 변경해 저장해야 한다. 즉 "\r\n"을 HTML의 줄바뀜 태그인 "<br>"로 변경하여 저장하여야 한다. 이때 사용할 수 있는 String 메서드가 replace 메서드이다.
replace(String, String)은 문자열 내의 특정 문자열을 다른 문자열로 바꾸어 준다.
다음은 feedDao 객체에서 DB에서 피드를 추가해주는 메서드인 insert메서드의 일부이다.
feed의 content를 추가하는 과정에서 replace 메서드를 이용해 "/r/n" 을 "<br>"로 변경해준다.
추가 수정
피드를 수정하려 하면 기존의 피드를 가져오게 되는데 이 과정에서 피드의 content를 String으로 인식하므로 <br>을 줄바뀜으로 인식하지 못한다. 그러므로 기존의 피드를 수정을 위해 가져올때는 "<br>"을 "\r\n"으로 변경해주어야 한다.
다음은 FeedEditController에서 피드 수정을 위해 기존의 피드를 가져오는 코드이다. editFeed의 content를 replace 메서드를 통해 줄바뀜 처리를 변경하는 것을 볼 수 있다.