newlife 프로젝트 4

2021. 12. 24. 13:03카테고리 없음

1. jsp에서 EL(expression language)를 쓸 때는 반드시 ${}안에 전부 써야한다! 

expression language이지, 변수담는 통이 아님..

관성적으로 쓰다가 기초적인 실수를 했음..

 

그리고 jsp 페이지상에서 값이 잘 나오는지 볼때는 <c:out value=""/>을 활용하자~

 

글 수정 뷰 - 원글에서 지정한 게시판 카테고리를 selected 되게 하기

<select class="custom-select" name="category_id" required>
  <c:forEach items="${categoryList}" var="category">
    <c:set var="c_id" value="${category.id}"/>
    <c:set var="c_name" value="${category.name}"/>
    <%-- 원래 게시판에 selected --%>                         
    <option value="${c_id}" <c:if test="${c_id == board.category_id}">selected</c:if>>${c_name}</option>
    <%-- 위아래 둘다 가능! --%>
    <%-- 다만 EL은 표현식 덩어리 안에 들어가야해!! ${}안에  == 등의 연산자가 다 들어가야지, 분할하면 읽어들이지 못함! --%>
    <%-- <option value="${c_id}" <c:out value="${c_id == board.category_id ? 'selected' : ''}"/>>${category.name}</option> --%>
 </c:forEach>
</select>

나는 spring controller에서 model.addAttribute();로 categoryList랑, board를 넘겨줌

게시판 id랑 name이 있는 category 테이블 리스트에서 해당 id와 board의 category_id가 일치하면 selected되게 했다.


2. WYSIWYG: What You See Is What You Get 에디터로 ck랑 summernote를 두고 고민하다가, summernote를 선택했다.

예뻤기때문.. 그리고 리뷰들을 보니깐 가볍게 쓰기 좋다고 한다. 

 

글 수정 뷰에서 좀 많이 헤맸는데,

글 내용이 에디터 안에 들어가게하려면

<textarea id="summernote" name="content">${board.content}</textarea>

 

그냥 이렇게 하면 된다. 엄청 간단한데 오류가 엄청났었음

이리저리 해본 결과, 

$('#summernote').summernote({

	...

서머노트 설정하는 위의 함수에서 placeholder를 지웠다.

글구 javascript 파일로 따로 안빼고 해당하는 jsp하단에 박아놔야함!! 


3. 장장 열흘은 개고생했던 오류의 원인

enctype="multipart/form-data"

정말 무섭다.. 다른 모든게 틀린게 없었는데 글쓰기에서 자꾸 모든 form 값을 null로 받아와서 원인을 못찾았었다.

근데 저걸 넣어서 그런거였음. 

저거는 file upload 설정해줄때만!! 넣어야한다.

괜히 앞으로 할거니까~~ 하고서 넣었다가 피봤다..

저거를 넣고 mulipartResolver 설정해주고 뭐뭐해야지만 값을 받을 수 있음

나는 하나씩 차례로 하고 있기 때문에 일단 빼줬다.

바로 정상적으로 모든 값을 받아온다!


4. 메서드 이름이 같고 파라미터가 다른 오버로딩overloading을 MyBatis에서 지원하지 않는다!

 

나는 getCategory()라는 method를 long id랑 String path를 파라미터로 하도록 만들었다.

String getCategory(long id);

long getCategory(String path);

이렇게 멋지게 짠 만들어봤자 MyBatis는 응 안돼 돌아가 이름 바꿔라고 한다..

 

Error creating bean with name 'sqlSession' defined in file [somefile.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [config/mybatis-configuration.xml]; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mapper.xml'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.xxx.xxx.xxxpackage.xxxclass.getCategory. please check mapper.xml at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)

에러내용이 읽기 쉽게 떠서 다행이다.. 

 

getCategory()는 나에겐 그저 하나의 메서드였지만 MyBatis에겐 id값이었기에..

unique해야한다는 결론을 얻었다.