목차
EL/JSTL 태그를 사용할 때, 리스트에 값이 포함되는지 판단해야 하는 경우가 있습니다. 자바코드로는 list.contains() 메소드를 사용하면 되는데, EL/JSTL 태그로는 어떻게 판단할까요? 몇 가지 방법이 있는데 저는 두 가지를 살펴보도록 하겠습니다.
Controller에서 list와 list2를 만들어 jsp 페이지로 전달합니다.
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
model.addAttribute("list", list);
List<String> list2 = new ArrayList<String>();
list2.add("AAA");
list2.add("BBB");
list2.add("CCC");
model.addAttribute("list2", list2);
return "test";
}
JSTL 라이브러리 선언
JSTL 라이브러리를 사용하기 위해 필요한 라이브러리를 jsp 페이지의 최상단에 선언합니다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
fn:contains 사용
fn:contains를 사용하는 방법입니다. 포함 여부를 boolean으로 리턴합니다.
${fn:contains(list, value)}
<c:if test="${fn:contains(list, 1)}">
My list contains 1 <br>
</c:if>
<c:if test="${fn:contains(list2, 'AAA')}">
My list2 contains AAA <br>
</c:if>
spring:eval 사용
spring:eval을 사용하는 방법입니다. expression 표현식으로 list.contains()를 설정하여 boolean을 리턴받고, 해당 리턴값을 변수에 저장합니다. EL태그로 변수를 사용할 수 있게 됩니다.
<spring:eval var="containsValue" expression="list.contains(value)" />
<spring:eval var="listContains1" expression="list.contains(1)" />
list contains 1? : ${listContains1}<br>
<c:if test="${listContains1}">
My list contains 1 <br>
</c:if>
<spring:eval var="listContains10" expression="list.contains(10)" />
list contains 10? : ${listContains10}<br>
<hr>
<spring:eval var="list2ContainsAAA" expression="list2.contains('AAA')" />
list2 contains AAA? : ${list2ContainsAAA}<br>
<c:if test="${list2ContainsAAA}">
My list2 contains AAA <br>
</c:if>
<spring:eval var="list2ContainsXXX" expression="list2.contains('XXX')" />
list2 contains XXX? : ${list2ContainsXXX}<br>
EL태그로 검색할 수도 있습니다. 저의 경우 EL태그로 원하는 value를 검색해야 했기 때문에 이 방법이 잘 적용되었습니다!
<c:set var="two" value="2" />
<spring:eval var="listContains2" expression="list.contains(${two})" />
list contains 2? : ${listContains2}<br>
<c:set var="bbb" value="BBB" />
<spring:eval var="list2ContainsBBB" expression="list2.contains('${bbb}')" />
list2 contains BBB? : ${list2ContainsBBB}<br>
이상으로 EL/JSTL로 리스트에 값이 포함되는지 판단하는 방법을 알아보았습니다.
참고
- https://stackoverflow.com/questions/31726946/checking-if-a-value-is-contained-in-an-array-in-jsp
- https://stackoverflow.com/questions/1076679/jstl-sets-and-lists-checking-if-item-exists-in-a-set
'Spring' 카테고리의 다른 글
[Spring] @RequestBody, @ResponseBody로 JSON 전송하기 (0) | 2022.09.09 |
---|---|
[Spring] RedirectAttributes - 리다이렉트 데이터 전달하기 (0) | 2022.09.05 |
[Spring] 컨트롤러의 리턴 타입 (0) | 2022.09.04 |
[Spring] Model, ModelAndView, @ModelAttribute - 컨트롤러에서 뷰로 데이터 전송하기 (0) | 2022.09.03 |
[Spring] @RequestParam - 요청 파라미터 데이터 파싱하기 (0) | 2022.09.02 |
댓글