본문 바로가기
Web/기타

[JAVA, SPRING, SUMMERNOTE] 서머노트 사용법 ④ (CSS충돌(부모,상위 겹침) 해결법)

by tyrannojung 2021. 5. 14.
반응형

썸머노트를 항상 게시판의 기본 에디터로 사용하면서 겪은 문제점을 같이 공유해보고자 합니다.

 

문제점(원인)

이런식으로 작성(CREATE)하고 db에 저장했습니다.

그 후 해당 게시판을 수정(UPDATE)하기를 하려고 불러올 때,

 

 이렇게 되는 부분을 확인할 수 있습니다.

저는 이런 식으로 불러왔는데, 썸머노트에 저장했을 때 양식은 적용되지 않고, 부모(상위) css가 적용되었습니다.

 

구글 크롬 개발자도구 - 썸머노트에 저장한 폰트(맑은고딕)이 아닌 전체 css에 적용된 NoTo Sans로 적용됨

 

페이지가 로딩될 때,

JAVA -> JSTL -> HTML -> CSS 순서로 실행됩니다.

그러므로 문제점이 된 원인은 JSTL이 실행이 되고 후에 전체(*) CSS가 적용되었으므로, CSS가 먹혔다고 볼 수 있습니다.

 

해결방법(JSP , JSTL)

간단하게 value값(JSTL) 출력 순서를 뒤로 하면 됩니다.

 

(주석 부분만 읽으시면 됩니다.)

<html>
<body>
<!-- textarea 에 value를 넣지 않는다. -->
<textarea id="summernote"></textarea>
<script>
	$(document).ready(function() 
	{
		$("#input_file").on("change", handleImgFileSelect);

		var fontSizes = [ '8', '9', '10', '11', '12', '14','16', '18', '20', '22', '24', '28', '30', '36', '50', '72','100' ];
		var fontNames = [ 'Arial', 'Arial Black','Comic Sans MS', 'Courier New', '맑은 고딕', '궁서', '굴림체', '굴림', '바탕체' ];
		var toolbar = [[ 'fontname', [ 'fontname' ] ],
		[ 'fontsize', [ 'fontsize' ] ],
		[ 'style',    [ 'bold', 'italic', 'underline','strikethrough', 'clear' ] ],
		[ 'color', [ 'forecolor', 'color' ] ],
		[ 'table', [ 'table' ] ],
		[ 'para', [ 'ul', 'ol', 'paragraph' ] ],
		[ 'height', [ 'height' ] ],
		[ 'view', [ 'codeview' ] ]
		];
      var setting = {
          height : 242,
          minHeight : null,
          maxHeight : null,
          focus : true,
          lang : 'ko-KR',
          toolbar : toolbar,
          fontSizes : fontSizes,
          fontNames : fontNames,
          callbacks : { //여기 부분이 이미지를 첨부하는 부분
              onImageUpload : function(files, editor,	welEditable) 
              {
                  for (var i = files.length - 1; i >= 0; i--) 
                  {
                      uploadSummernoteImageFile(files[i],
                      this);
                  }
              },
              onMediaDelete : function(target) 
                {
                    console.log(target[0]);
                    deleteFile(target[0].src);
                }
              }
          };
			
          <!-- value 를 먼저 넣고 초기화 한다. -->  
          $('#summernote').val('${fn:replace(productDetail.product_content,"\'","\\'")}');
          $('#summernote').summernote(setting);
      });
</script>
</body>
</html>

맨 위에 textarea에 value값을 넣지 않고, 스크립트단의 document ready를 통해 summernote 초기화 전 value값을 삽입해 줍니다. 브라우저가 웹문서를 다 읽고 DOM이 생성되면 ready메소드가 실행되므로 앞전과 같은 css충돌에서 해방될 수 있습니다.

 

마치며

열심히 구글링 해서 원인을 찾아보았지만 해결방법이 보이지 않아 다양한 시도 끝에 발견했습니다. 혹시 더 좋은 해결책이 있으시면 댓글 남겨주시면 진심으로 감사하겠습니다.

 

글 내용 중 오류가 있거나 내용상 어려운 점 있어도 댓글 남겨주시면 그것 또한 감사합니다!

 

반응형

댓글