오류가 2개 발생하여 정리하였다. 제목의 오류는 오류 2에 해당한다
환경
java 8, mybatis, spring boot, maven project
오류 1
Result Maps collection does not contain value
MyBatis mapper 설정시 resultMap과 resultType값을 잘못 설정하게 되면 발생하는 문제이다
<!-- 상품 목록 조회 -->
<select id="showProduct" resultMap="ProductDto">
select * from coffee_product
</select>
resultType이 아닌 resultMap으로 설정되어있다
해결
<!-- 상품 목록 조회 -->
<select id="showProduct" resultType="ProductDto">
select * from coffee_product
</select>
오류2
Property [pName] not found on type [ProductDto]
ProductDto에서 pName을 찾을 수 없다는 것으로 추정된다
상품 리스트를 db에서 List<dto> 타입으로 가져왔을 때 발생한 오류이다
오류가 발생한 jsp 코드
15: <h2>Hello!</h2>
16: <div>JSP List Test</div>
17: <c:forEach var="item" items="${list}">
18: Hello! ${item.pName} <br />
19: </c:forEach>
20: </body>
21: </html>
원인
JSTL의 EL 태그를 잘못 쓴 경우
1. items = "${list}"에 공백이 있거나 ""를 적지 않은 경우
잘못된 예시
items = ${list} //""가 없음
items = " ${list} " //""사이에 공백이 있음
2. el 태그를 사용할 때 대문자로 선언된 변수명이 있는 경우 오류가 발생한다
잘못된 예시
${item.Pname}
2-1. 변수명 명명규칙에 따라 작성하기 때문에 대문자로 인한 오류는 절대 아닐거라 단정했으나,
변수명 두번째 자리가 대문자인 경우에도 오류가 발생한다고 한다
오류가 나는 변수명 예시
String Pname; > ${item.Pname}
String pName; > ${item.pName}
※ jsp 코드를 보면 알겠지만 에러의 원인이 바로 이 경우에 해당했다.
혹시나해서 다른 컬럼을 입력한 결과 제대로 출력됨을 확인할 수 있었다
Dto 혹은 Vo의 문제인 경우
혹은 Dto 또는 Vo 클래스에 getter가 선언되지 않은 경우에도 해당 오류가 발생한다고 한다
해결
다른 방법도 있을 것 같지만 컬럼 이름을 바꾸는 방식으로 해결했다
alter table 테이블 이름 change 컬럼 바꿀컬럼명 타입 제약조건;
→ alter table coffee_product change pName pname varchar(30) not null;
상품명도 제대로 출력됨을 확인할 수 있다
'개인기록' 카테고리의 다른 글
[오류/해결] Public Key Retrieval is not allowed (0) | 2022.11.13 |
---|---|
[오류/해결] jsp 오류 Page directive: illegal to have multiple occurrences of contentType with different values (0) | 2022.11.09 |
[오류/해결] spring boot mybatis insert가 안되는 오류 (0) | 2022.11.05 |
[오류/해결] spring boot에서 mybatis 테스트하기 (0) | 2022.10.30 |
[해결] jsp에서 css, js 경로를 못 찾는 문제 (0) | 2022.09.23 |