반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[SpringBoot] java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 오류 해결과정 본문

。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★/활용해본 코드 적용 예시 (◍•ᴗ•◍)❤

[SpringBoot] java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 오류 해결과정

yeonee 여니 2023. 9. 18. 08:57
728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

yeonee 블로그 : 네이버 블로그

예쁘고 맛있게 먹고 건강하게,강인하지만 온화하게 행하라. ※맛스타운스타일상 인스타 www.instagram.com/s2._.y25n ※맛집감성일상 유튜브https://youtube.com/channel/@S2_yeonee 티스토리https://yeoneeluv.tistory.co

blog.naver.com

 

 

이번 프로젝트 주제로 SNS 커뮤니티 홈페이지를 제작하였습니다.
제가 맡은 기능은 인스타에서 검색하듯이 검색한 키워드와 관련된 해시태그를 가진 게시물의 썸네일이 뜨도록 하는 기능 구현을 하는 것이었습니다. (위의 완성된 기능 구현 모습 참고)


그런데...
이게 왜 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 오류를 내뱉는지...
또는 전체 게시물들의 썸네일이 뜨는지... 우여곡절 11-12회의 오류 해결 시도 끝에 해결해냈답니다!

 

< Controller >

< 시도1 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    int result = 0;
    if (MyHistory != null) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }
    List<Images> slist2 = cService.selectList2(keyword);
    if(slist2.size()!=0) {
        List<Images> keywordList = slist2.get(0).get("FeedHashtag").toString();
    }
    log.info("slist2 = {} ", slist2);
    model.addAttribute("keyword",keyword);
    model.addAttribute("slist", slist2);
    return "forward:/common/search.jsp";
}

-> 에러가 났고, sts 콘솔창에 값이 null로 떴습니다.

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 오류가 나서 구글에서 찾아보니, List에서 값이 없는데 자꾸 get으로 불러오려고 해서 일어나는 오류였습니다.

이렇다 보니 제가 적은 코드 중 List<Images> slist2에 값이 제대로 담기는지 여부가 중요하더군요.

 

< 시도2 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    int result = 0;
    if (MyHistory != null) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }
    List<Images> slist2 = cService.selectList2(keyword);
    if(slist2.size()!=0) {
        slist2.get(0).getFeedHashtag();
    }
    log.info("slist2 = {} ", slist2);
    model.addAttribute("keyword",keyword);
    model.addAttribute("slist", slist2);
    return "forward:/common/search.jsp";
}

-> 위의 포스팅을 참고하여 고쳐보았습니다.  (https://tyson.tstory.com/157)
그래도 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 에러가 뜨고, keyword = bread 제가 검색창에 입력한 키워드로 잘 입력이 되는 것도 확인하였습니다.

 

< 시도3 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    int result = 0;
    if (MyHistory != null) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }
    Images i = (Images) Session.getAttribute("fileNo");
    List<Images> slist2 = cService.selectList2(i.getFileNo());
    int result2 = 0;
    if (slist2 != null) {
        if (!slist2.get(0).getFeedHashtag().equals(keyword)) {
            Images images = new Images();
            images.setFileNo(i.getFileNo());
            images.setFeedHashtag(keyword);
            result2 = cService.selectListImg(images);
            log.info("result2={}", result2);
        }
    }
    log.info("slist2 = {} ", slist2);
    model.addAttribute("keyword",keyword);
    model.addAttribute("slist2", slist2);
    return "forward:/common/search.jsp";
}

-> 키워드와 주소창에 내용은 잘 나오는데 sts콘솔창에 slist2도 result2도 안찍혀 나오더라구요. 그리고 여전히java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 에러가 뜹니다.ㅠㅠ 결론은 list에 값이 담기지 않고 있던 것이죠.

 

< 시도4 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    log.info("MyHistory = {}", MyHistory);
    int result = 0;
    if (!MyHistory.isEmpty()) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }

    List<Images> slist2 = cService.selectList2(keyword);
    log.info("slist2 = {}", slist2);
    int result2 = 0;
    if (slist2 != null) {
        if (!slist2.get(0).getFeedHashtag().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result2 = cService.insertSearch2(search);
            log.info("result2={}", result2);
        }
    }
    log.info("slist2 = {} ", slist2);
    model.addAttribute("keyword",keyword);
    model.addAttribute("slist2", slist2);
    return "forward:/common/search.jsp";
}

-> 여전히 같은 에러가 나와서 원인을 다시 체크해보았습니다. session에 담아 불러올 수 없고 필요없는 fileNo : 필요없는 부분의 코드 삭제 후 수정 에러 내용이 바뀜-> log.info찍어보니 MyHistory=[] 빈값으로 뜸. MyHistory값이 없어서 다음 로직인 코드 부분이 실행되는데, 
<select id="selectList2" resultMap="imageResultSet">
 SELECT *
 FROM IMAGE I
 JOIN FEED F ON F.FEED_NO = I.FILE_FNO
 WHERE I.FILE_LEVEL = '2'
   <if test="keyword != null and keyword != ''">
    AND --> 여기까지만 조건문이 실행되고 조회할 수 없어서 에러남.
      <choose>
      <when test="condition == 'hashtag'">
       FEED_HASHTAG LIKE '%${keyword}%'
      </when>
      <when test="condition == 'userNick'">
       USER_NICK LIKE '%${keyword}%'
      </when>
      </choose>
   </if>
</select>
여기서 조건문을 실행하려면 hashtag와 userNick이 필요합니다.
Map<String,Object> map = new HashMap<String,Object>();으로 hashtag와 userNick을 같이 넣어주어서 slist2에 map형식으로 매개변수를 담아주어서 다시 조회해보았습니다.

 

< 시도5 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag, String userNick) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    log.info("MyHistory = {}", MyHistory);
    int result = 0;
    if (!MyHistory.isEmpty()) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }

    Map<String,Object> map = new HashMap<String,Object>();
    map.put("feedHashtag", feedHashtag);
    map.put("userNick", userNick);
    log.info("map={}", map);
    List<Images> slist2 = cService.selectList2(map);
    log.info("slist2 = {}", slist2);
    int result2 = 0;
    if (!slist2.isEmpty()) {
        if (!slist2.get(0).getFeedHashtag().equals(keyword)) {
            Search search = new Search(); // 같은 키워드 없을 시 서치에 담아줌
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result2 = cService.insertSearch2(search);
            log.info("result2={}", result2);
        }
    }
    log.info("slist2 = {} ", slist2);
    model.addAttribute("keyword",keyword);
    model.addAttribute("slist2", slist2);
    return "forward:/common/search.jsp";
}

-> sts 콘솔창을 통해 result2=1과 slist2에 값이 담기는 것을 확인했습니다.
   에러창은 안떴는데, 서버창에서는 제가 검색한 내용이 안뜨네요 ㅠㅠ 다시 시도!!

< 시도6 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag, String userNick) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    log.info("MyHistory = {}", MyHistory);
    int result = 0;
    if (!MyHistory.isEmpty()) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }

    Map<String,Object> map = new HashMap<String,Object>();
    map.put("feedHashtag", feedHashtag);
    map.put("userNick", userNick);
    log.info("map={}", map);
    List<Images> slist2 = cService.selectList2(map);
    log.info("slist2 = {}", slist2);
    int result2 = 0;
    if (!slist2.isEmpty()) {
        if (!slist2.get(0).getFeedHashtag().equals(keyword)) {
            Search search = new Search(); // 같은 키워드 없을 시 서치에 담아줌
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result2 = cService.insertSearch2(search);
            log.info("result2={}", result2);
        }
    }
    log.info("slist2 = {} ", slist2);
    model.addAttribute("keyword",keyword);
    model.addAttribute("slist2", slist2);
    return "forward:/common/search.jsp";
}

-> 드디어 에러가 안떴어요! 그런데 ... 해시태그로 검색하였는데 해시태그를 포함한 썸네일들만 나오는 것이 아닌 모든 썸네일들이 출력이 되네요... 해결 방법을 다시 생각해보고 이번엔 jsp에 조건문을 넣어 시도해보았습니다.

 

<jsp 시도1>

<!-- 검색아래 피드파트-->
 <div class="feed-content-wrap">
    <div class="feed-content-wrap1">
        <c:if test="${keyword == null}">
            <c:forEach var="s" items="${slist}" begin="0" end="${slist.size()}" step="1" >
        </c:if>

            <div class="feed-content2" data-bs-toggle="modal" data-bs-target="#MyDetailFeed" onclick="feedNo(event , ${s.fileFno})">
                <div>
                <img src="${contextPath}/${s.filePath}/${s.changeName}">
                <div class="like">
                   <svg
                       xmlns="http://www.w3.org/2000/svg"
                       width="16"
                       height="16"
                       fill="currentColor"
                       class="bi bi-heart-fill"
                       viewBox="0 0 16 16"
                   >
                       <path
                           fill-rule="evenodd"
                           d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z"
                       />
                   </svg>
                   <span class="bi">${s.likeCount}</span>
               </div>
               </div>
            </div>
        </c:forEach>
    </div>
</div>

-> result2=1로 값이 찍혀 나오고, slist2에 내가 검색하지 않은 썸네일 리스트들도 모두 담기는 것을 확인했습니다 ㅠㅠ
조건문 부분을 좀 수정해본 뒤 다시 시도해보았습니다.

 

<jsp 시도2>

<!-- 검색아래 피드파트-->
 <div class="feed-content-wrap">
    <div class="feed-content-wrap1">
        <c:if test="${keyword == null}">
            <c:forEach var="s" items="${slist}" begin="0" end="${slist.size()}" step="1" >
            <div class="feed-content2" data-bs-toggle="modal" data-bs-target="#MyDetailFeed" onclick="feedNo(event , ${s.fileFno})">
                <div>
                <img src="${contextPath}/${s.filePath}/${s.changeName}">
                <div class="like">
                   <svg
                       xmlns="http://www.w3.org/2000/svg"
                       width="16"
                       height="16"
                       fill="currentColor"
                       class="bi bi-heart-fill"
                       viewBox="0 0 16 16"
                   >
                       <path
                           fill-rule="evenodd"
                           d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z"
                       />
                   </svg>
                   <span class="bi">${s.likeCount}</span>
                   </div>
                   </div>
                </div>
            </c:forEach>
        </c:if>

        <c:if test="${keyword != null}">
            <c:forEach var="s" items="${slist2}" begin="0" end="${slist2.size()}" step="1" >
            <div class="feed-content2" data-bs-toggle="modal" data-bs-target="#MyDetailFeed" onclick="feedNo(event , ${s.fileFno})">
                <div>
                <img src="${contextPath}/${s.filePath}/${s.changeName}">
                <div class="like">
                   <svg
                       xmlns="http://www.w3.org/2000/svg"
                       width="16"
                       height="16"
                       fill="currentColor"
                       class="bi bi-heart-fill"
                       viewBox="0 0 16 16"
                   >
                       <path
                           fill-rule="evenodd"
                           d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z"
                       />
                   </svg>
                   <span class="bi">${s.likeCount}</span>
                   </div>
                   </div>
                </div>
            </c:forEach>
        </c:if>
    </div>
</div>

-> result2=1로 값이 찍혀 나오고, 여전히 slist2에 내가 검색하지 않은 썸네일 리스트들도 담깁니다 ㅠㅠ
다시 컨트롤러 부분을 수정하였습니다.

 

< 시도7 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag, String userNick) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    log.info("MyHistory = {}", MyHistory);
    int result = 0;
    if (!MyHistory.isEmpty()) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }

    Map<String,Object> map = new HashMap<String,Object>();
    map.put("feedHashtag", keyword);
    map.put("userNick", m.getUserNo());
    log.info("map={}", map);

    List<Images> slist2 = cService.selectList2(map);
    log.info("slist2 = {}", slist2);

    int result2 = 0;
    if (!slist2.isEmpty()) {
        if (!slist2.get(0).getFeedHashtag().equals(keyword)) {
            Search search = new Search(); // 같은 키워드 없을 시 서치에 담아줌
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result2 = cService.insertSearch2(search);
            log.info("result2={}", result2);
            map.put("result2", result2);

        }
    }
    log.info("slist2 = {} ", slist2);
    model.addAttribute("slist", slist2);
    return "forward:/common/search.jsp";

}

-> 컨트롤러 조건식을 바꿔보았습니다. 하지만... 그래도 위와 결과가 같다는거 ㅠㅠ
if 조건문 안의 내용들을 수정해보았습니다.

 

< 시도8-9 > 

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag, String userNick) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    log.info("MyHistory = {}", MyHistory);
    int result = 0;
    if (!MyHistory.isEmpty()) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }

    List<Images> slist = cService.selectList();
    log.info("slist = {} ", slist);

    Map<String,Object> map = new HashMap<String,Object>();
    map.put("feedHashtag", keyword);
    map.put("userNick", m.getUserNo());
    log.info("map={}", map);

    List<Images> slist2 = cService.selectList2(map);
    log.info("slist2 = {}", slist2);
//		int result2 = 0;
//		if (!slist2.isEmpty()) {
        /*if (!slist2.get(0).getFeedHashtag().equals(keyword)) {
            Search search = new Search(); // 같은 키워드 없을 시 서치에 담아줌
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result2 = cService.insertSearch2(search);
            log.info("result2={}", result2);*/

//				List<Images> slist3 = cService.selectList3(map);
//				log.info("slist3 = {}", slist3);
//				model.addAttribute("slist3", slist3);
//				return "forward:/common/search.jsp";
//			}
//		}
    model.addAttribute("slist", slist);

    model.addAttribute("slist2", slist2);
    return "forward:/common/search.jsp";
}

-> 한번은 if조건문 안의 if조건문을 주석처리 한 것을 풀고도 시도해보고, 두번째는 안쪽 if문을 주석처리해서도 조회해보았습니다. 서버측의 결과는 계속 전체 썸네일이 조회되는 모습을 보였고 오류는 발생하지 않았습니다.

 

< 시도10 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam Map<String, Object> paramMap, @RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag, String userNick) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    log.info("MyHistory = {}", MyHistory);
    int result = 0;
    if (!MyHistory.isEmpty()) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }

    log.info("paramMap = {}", paramMap);
    paramMap.put("feedHashtag", keyword);
    paramMap.put("userNick", m.getUserNo());
    log.info("paramMap2 = {}", paramMap);

    List<Images> slist2 = cService.selectList2(paramMap);
    log.info("slist2 = {}", slist2);

    model.addAttribute("slist2", slist2);

    return "forward:/common/search.jsp";
}

-> 이번엔 매개변수로 paramMap을 쓰고 paramMap에 keyword와 m.getUserNo를 담아 주었습니다.
paramMap엔 내가 검색하는 과정에 쓰고자 하는 매개변수를 모두 담을 수 있었고, 이를 이용하여 검색한 keyword인 해당 해시태그를 가진 리스트들을 slist2에 담아주었습니다.
sts 콘솔창에는 내가 검색한 keyword를 가진 (즉, 검색한 keyword의 해시태그를 가진) 썸네일의 정보 목록이 담겼습니다.
하지만 서버측에서는 검색 결과로 아무 내용도 뜨지 않았습니다.

 

< 시도11 >

// 검색 기능
@GetMapping("/searchList.se")
public String selectList(@RequestParam Map<String, Object> paramMap, @RequestParam(name = "keyword") String keyword, Model model, HttpSession Session, String feedHashtag, String userNick) {
    Member m = (Member) Session.getAttribute("loginUser");
    List<Member> rf = mService.recommandFollowList(m.getUserNo());
    log.info("rf={}", rf);
    model.addAttribute("rf", rf);
    log.info("keyword = {}", keyword);
    List<Search> MyHistory = cService.MyHistory(m.getUserNo());
    log.info("MyHistory = {}", MyHistory);
    int result = 0;
    if (!MyHistory.isEmpty()) {
        if (!MyHistory.get(0).getSearchKeyword().equals(keyword)) {
            Search search = new Search();
            search.setSearchWriter(m.getUserNo());
            search.setSearchKeyword(keyword);
            result = cService.insertSearch(search);
            log.info("result={}", result);
        }
    }

    log.info("paramMap = {}", paramMap);
    paramMap.put("feedHashtag", keyword);
    paramMap.put("userNick", m.getUserNo());
    log.info("paramMap2 = {}", paramMap);

    List<Images> slist2 = cService.selectList2(paramMap);
    log.info("slist2 = {}", slist2);

    model.addAttribute("slist", slist2);

    return "forward:/common/search.jsp";
}

-> 컨트롤러에서 model.addAttribute("slist", slist2);로 변경하였습니다.

 

< jsp 시도3 >

<!-- 검색아래 피드파트-->
<div class="feed-content-wrap">
    <div class="feed-content-wrap1">
        <c:if test="${keyword == null}">
            <c:forEach var="s" items="${slist}" begin="0" end="${slist.size()}" step="1" >
            <div class="feed-content2" data-bs-toggle="modal" data-bs-target="#MyDetailFeed" onclick="feedNo(event , ${s.fileFno})">
                <div>
                <img src="${contextPath}/${s.filePath}/${s.changeName}">
                <div class="like">
                   <svg
                       xmlns="http://www.w3.org/2000/svg"
                       width="16"
                       height="16"
                       fill="currentColor"
                       class="bi bi-heart-fill"
                       viewBox="0 0 16 16"
                   >
                       <path
                           fill-rule="evenodd"
                           d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z"
                       />
                   </svg>
                   <span class="bi">${s.likeCount}</span>
               </div>
               </div>
            </div>
            </c:forEach>
        </c:if>

        <c:if test="${keyword != null}">
            <c:forEach var="s" items="${slist}" begin="0" end="${slist.size()}" step="1" >
            <div class="feed-content2" data-bs-toggle="modal" data-bs-target="#MyDetailFeed" onclick="feedNo(event , ${s.fileFno})">
                <div>
                <img src="${contextPath}/${s.filePath}/${s.changeName}">
                <div class="like">
                   <svg
                       xmlns="http://www.w3.org/2000/svg"
                       width="16"
                       height="16"
                       fill="currentColor"
                       class="bi bi-heart-fill"
                       viewBox="0 0 16 16"
                   >
                       <path
                           fill-rule="evenodd"
                           d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z"
                       />
                   </svg>
                   <span class="bi">${s.likeCount}</span>
               </div>
               </div>
            </div>
        </c:forEach>
    </c:if>
    </div>
</div>

-> jsp에서 keyword가 null인 경우와 null이 아닌 경우로 나뉜 부분의 slist2부분을 위아래 조건문 모두 slist로 동일하게 해주었습니다.

 

 

결과 -> 내가 검색하려는 옵션별, 내가 찾고자하는 keyword와 맞는 해시태그를 가진 게시+글만 뜹니다. 

 

+ photo로 검색한 결과, photo 해시태그를 가진 썸네일만 검색되어 화면에 썸네일들이 나옵니다.

 

+ iu로 검색한 결과, iu 해시태그를 가진 썸네일만 검색되어 화면에 썸네일들이 나옵니다.

728x90
반응형
LIST