달바라기
287
2016-05-24 14:41:10
3
4639

mybatis + spring SELECT 시 NULL일때


안녕하세요

일단 컨트롤러는 아래처럼 작성했습니다.

	@RequestMapping(value = "/popup/equip/addFlt.do")
	public ModelAndView addFlt(CommandMap commandMap) throws Exception
	{
		ModelAndView mv = new ModelAndView("/popup/equip/addFlt");
		Map<String, Object> data = eqService.selectEQFltType(commandMap.getMap()).get(0);
		mv.addObject("data", data);
		return mv;
	}

그리고 데이터를 사용할JSP파일에서  아래처럼 사용하고 있습니다.

그런데 SELECT결과값이 있을경우엔 문제가 없는데,

SELECT결과값이 NULL인 경우엔 java.lang.IndexOutOfBoundsException이 발생합니다.

	<c:set var="EQ_NM" value="${data.EQ_NM}"/>
	<c:set var="FLUCT_YMD" value="${data.FLUCT_YMD}" />
	<c:set var="FLUCT_CONT" value="${data.FLUCT_CONT}" />
	<c:set var="FLUCT_NOTE" value="${data.FLUCT_NOTE}" />

검색을 통해서 resultType이 hashmap인경우 NULL값에 대한 설정을 찾아서 시도해 보았습니다.

맵퍼 파일에 다음을 설정하고 서버리스타트 후에도 별반 달라짐이 없어서 문의 드립니다.

	<settings>
		<setting name="callSettersOnNulls" value="true"/>
	</settings>

위 설정을 해주면 SELECT결과 값이 NULL이라도 해시맵에 키가 존재 하게해주는 옵션이 아닌가요?







0
  • 답변 3

  • brandonL
    494
    2016-05-24 14:43:49

    코드상으로도 IndexOutOfBoundsException이 충분히 발생할 수 있어 보이는데요?


    eqService.selectEQFltType(commandMap.getMap())


    아무런 체크없이 꺼내면.. 


  • 달바라기
    287
    2016-05-24 14:58:39


    Map<String, Object> data = eqService.selectEQFltType(commandMap.getMap()).get(0);

    이렇게 작성한 이유는 검색조건이 없으면 리스트를 출력하고 검색조건이 있으면 맨처음것만 가져 올려고 쿼리 하나로 해결하려고 작성한것입니다.

    이게 문제가 있는가 보네요.

  • dlqorgod
    386
    2016-05-24 17:53:07


    <c:if test="${not empty data}">
    	<c:set var="EQ_NM" value="${data.EQ_NM}"/>
    	<c:set var="FLUCT_YMD" value="${data.FLUCT_YMD}" />
    	<c:set var="FLUCT_CONT" value="${data.FLUCT_CONT}" />
    	<c:set var="FLUCT_NOTE" value="${data.FLUCT_NOTE}" />
    </c:if>
    


    <c:if test="${data != null}">

  • 로그인을 하시면 답변 을 등록할 수 있습니다.