본문 바로가기
Java/Spring

[Spring] xml의 <if test=...>가 작동하지 않을 때

by 펜네임 2020. 7. 22.

 

오류 상황

 

jsp단에서 select 태그를 사용해 직접 검색조건의 값을 세팅했다.

사용자가 선택한 값은 폼에 담겨서 VO형태로 컨트롤러로 넘어간다.

 

이동 순서 : jsp > 컨트롤러 > 서비스 > 서비스 임플 > xml

 

컨트롤러에서 확인해보면 받은 값은 String형태였다.

xml파일까지 넘어온 다른 검색조건 값들도 👇아래처럼 String을 받아 사용하고 있었다.

 

<if test="변수명 == '특정값'">
...
</if>


그런데 받아온 값이 xml의 if 조건으로 걸러지지 않음.

 

 

오류 원인 및 해결법

*혼자 내린 결론이므로 틀릴 수 있음

 

1. jsp단의 다른 검색조건들은 화면 로드 시 돌리는 select문을 통해 컨트롤러에서 받아온 list 안의 변수를 c태그를 이용해 세팅해주고 있었음. => 아래 select에서 선택된 값은 보기에 숫자라도 String임. 따라서 문제 없이 xml 파일에서 String으로 인식함.

 

<select id="searchItem" name="searchItem">
  <c:forEach items="${list }" var="list" varStatus="i">
    <option value="${list.value}" label="${list.name}" 
      <c:if test="${list.value eq searchVO.searchItem}">
      	selected="selected"
      </c:if>
    </option>
  </c:forEach>
</select>  

 

2. select문에 내가 직접 입력한 숫자 값 int임. 따라서 xml 파일에서도 int로 인식.

 

3. xml에서 비교할 때 int로 비교한다.

<if test="변수명 == 특정값">
...
</if>



의문점

 

컨트롤러에서는 VO에서 가져와 String 변수에 담아봐도 문제가 없었고,

equals()를 사용해 비교해봐도 String이었던 값이 왜 xml에서는 int로 인식될까?

 

댓글