본문 바로가기
Spring

[Spring] EL/JSTL에서 list contains - 리스트에 값이 포함되는지 알고 싶을 때

by Amy IT 2022. 9. 26.

목차

     

    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로 리스트에 값이 포함되는지 판단하는 방법을 알아보았습니다.

     

     

    참고

     

    댓글