프로젝트에서 게시글 작성하기 기능을 구현하는데 네이버 스마트 에디터를 사용하기로 했다.
오픈소스로 공개되어 있는 Smart Editor 2.0을 사용했고,
2.9 버전부터는 사진 업로드 기능을 제공하지 않아 2.8.2 버전을 다운받아 사용했다 !
이번 포스팅에서는 스마트 에디터를 프로젝트에 적용하고,
에디터에 입력한 값을 가져오는지 출력까지 해 볼 예정이다.
🔹 스마트 에디터 다운로드
https://github.com/naver/smarteditor2/releases/tag/v2.8.2.3
Release v2.8.2.3: archive v2.8.2.4259f59 · naver/smarteditor2
2.8.2.3 보안 패치 file_uploader_html5.php의 null byte injection 취약점 추가 보완 file_uploader.php의 리다이렉트 취약점 보완 sample.php에서 XSS filtering을 위해 HTMLPurifier라이브러리를 적용 sample.php -> sample/viewer/in
github.com
🔹 프로젝트에 스마트 에디터 적용하기
먼저 나의 프로젝트 환경은 아래와 같다.
- Java, SpringBoot
- Thymeleaf
- JPA, MySQL
1. 스마트 에디터 적용하기
resources/static/smarteditor 에 다운받은 파일들을 넣어준다.
2. 게시판 화면에 스마트 에디터 적용하기
1) 스마트 에디터를 출력할 페이지에 스크립트 태그 추가하기
// <script type="text/javascript" src="/smarteditor/js/HuskyEZCreator.js" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/smarteditor/js/HuskyEZCreator.js}" charset="UTF-8"></script>
2) 에디터를 넣을 위치에 <textarea> 추가하기
<form action="insertStudentInfoForm" method="post">
<div id="smarteditor">
<textarea name="editorTxt" id="editorTxt"
rows="40" cols="10"
placeholder="내용을 입력해주세요."
style="width: 858px"></textarea>
</div>
<div class="btn-group">
<div class="inner">
<button type="button" id="btn-insert">등록</button>
</div>
</div>
</form>
- rows의 설정한 값에 따라 화면에 보이는 라인 수를 조절할 수 있다.
3) 에디터 설정하기
static/js 안에 article.js 파일을 만들어 스크립트 태그 안에 에디터를 설정해 주었다.
// 네이버 스마트 에디터 2.0 적용
let oEditors = [];
function smartEditor() {
console.log("Naver SmartEditor");
nhn.husky.EZCreator.createInIFrame({
oAppRef: oEditors,
elPlaceHolder: "editorTxt",
sSkinURI: "/blog/smarteditor/SmartEditor2Skin.html",
fCreator: "createSEditor2"
});
}
$(document).ready(function() {
smartEditor();
});
- elPlaceHolder : 위에서 설정한 textarea의 id 값을 넣어준다.
- sSkinURI : static/smarteditor 하위의 SmartEditor2Skin.html을 연결해 준다.
- Spring Boot에서 기본적으로 /static 폴더 경로를 잡아주고, 필자는 context-path를 /blog로 설정했기 때문에
"/blog/smarteditor/SmartEditor2Skin.html" 로 설정해 주었다. - 작성 완료 후, 스마트 에디터를 출력할 페이지에 스크립트 태그를 추가해준다 !
4) 화면 확인하기
세팅 완료 후 프로젝트를 실행시켜 보면 아래와 같은 화면을 확인할 수 있다.
- 디폴트 세팅으로 에디터 위에 버전이 뜨는데, 이를 삭제하고 싶다면
- static/smarteditor 폴더의 SmartEditor2Skin.html 안의
<span id="rev">Version: 2.8.2.4259f59 </span> 태그를 지워주면 된다.
- static/smarteditor 폴더의 SmartEditor2Skin.html 안의
🔹 에디터에 입력한 내용 가져오기
DB에 저장하기 전, 에디터에서 편집한 내용을 잘 가져오는지 확인해 보자 !
에디터에서 편집한 내용은 단순이 document.getElementById("editorTxt").value로 가져올 수 없다.
textarea의 값을 가져오기 위해서는 UPDATE_CONTENTS_FIELD 메시지를 호출해주어야 한다.
에디터를 작성한 후 등록 버튼을 눌렀을 때, 작성한 내용을 받을 수 있도록 submitPost() 함수를 작성했다.
function submitPost() {
// alert("click!");
oEditors.getById["editorTxt"].exec("UPDATE_CONTENTS_FIELD", [])
let title = document.getElementById("post-title-inp").value
let content = document.getElementById("editorTxt").value
if (title == '') {
alert("제목을 입력해주세요.")
let titleInput = document.getElementById("post-title-inp");
if (titleInput) {
titleInput.focus();
}
} else if (content == '') {
alert("내용을 입력해주세요.");
oEditors.getById["editorTxt"].exec("FOCUS");
return;
} else {
console.log(content)
}
}
- 에디터의 내용을 받아오면서, 게시글의 제목도 함께 가져와 줬다.
🔹 결과 화면
다음 포스팅에서는 받아온 내용을 DB에 저장하고, 상세 페이지에 출력하는 것을 포스팅할 예정이다.
지쳤어요..😂
📃 reference
'Spring' 카테고리의 다른 글
[Spring] @Controller와 @RestController 차이 (0) | 2024.11.30 |
---|---|
Naver SmartEditor 2.0 적용하기 - DB 저장, 출력 (0) | 2024.07.24 |
[스프링 시큐리티 기본 API & Filter 이해] Remember Me 인증 & 필터 (0) | 2023.09.22 |
[스프링 시큐리티 기본 API & Filter 이해] Logout & 필터 (0) | 2023.09.22 |
[스프링 시큐리티 기본 API & Filter 이해] Form Login & 인증 필터 (0) | 2023.09.14 |