해결 방법 정리하기
카페 searchList.jsp에서 카페리스트를 보여주는 JSTL 기능 삭제(주석처리) 후 ajax로 카페리스트 세팅 / view more -> pagination으로 원복
// 페이지 접속 시 최초 실행(onload) 함수
window.onload = function() {
// 페이지가 완전히 로드되면 이 함수가 실행
alert('페이지가 로드되었습니다!');
keyword = '${keyword}';
loadFilteredCafes(keyword, currentPage); // 카페검색 최초 리스팅
};
// 필터된 카페들을 불러오는 함수
function loadFilteredCafes(keyword, currentPage){
$.ajax({
url: "/usr/findcafe/filterCafes", // 요청할 URL
type: "POST", // POST 방식으로 요청
contentType: "application/json", // 요청 데이터의 타입
data: JSON.stringify({ // JSON 형태로 데이터 전송
keyword: keyword, // 키워드 전송
page: currentPage // 페이지 번호 전송
}),
success: function(dataMap) { // 요청이 성공했을 때의 콜백 함수
totalPages = Math.ceil(dataMap.cafesTotalCount / 5); // 전체 페이지 수 계산
updatePagination(currentPage, totalPages); // 페이지네이션 업데이트
updateCafeList(dataMap.cafesCurrentList); // 카페 리스트 업데이트
},
error: function(xhr, status, error) { // 요청이 실패했을 때의 콜백 함수
console.error("Ajax request failed:", status, error); // 에러 로그 출력
}
});
}
function updatePagination(currentPage, totalPages) {
// 페이지네이션을 표시할 HTML 요소를 가져온다
var paginationElement = $(".pagination");
// 이전에 표시된 페이지네이션을 초기화
paginationElement.empty();
var paginationHTML = '';
// 페이지 번호 생성
for (var i = 1; i <= totalPages; i++) {
var activeClass = (i === currentPage) ? 'btn-active' : '';
paginationHTML += '<a class="btn btn-circle btn-ghost btn-xs ' + activeClass + '" href="?page=' + i + '">' + i + '</a>';
}
$('.pagination').html(paginationHTML); // 페이지네이션 업데이트
}
<!-- 검색결과 -->
<section class="search-result" id="search-result">
<!-- <c:forEach var="cafe" items="${cafes}">
<a href="cafeDetail?id=${cafe.id}" class="linkbox1">
<div class="content-info-box" style="margin-bottom: 50px">
<div class="cafe-img-box">
<img src="${cafe.cafeImgUrl1}" alt="카페 이미지" />
</div>
<div class="name-address">
<div class="cafe-name">${cafe.name}</div>
<p class="cafe-address">${cafe.address}</p>
</div>
<div class="like-count">
<span class="material-symbols-outlined"> favorite </span>
<div class="like-count-num">${cafe.cafeScrapCount}</div>
</div>
<div class="review-count">
<div class="title-review">리뷰</div>
<div class="review-count-num">${cafe.reviewCount }</div>
</div>
<div class="hashtag">${cafe.hashtag}</div>
</div>
</a>
</c:forEach> -->
</section>
// 카페 리스트 업데이트 함수
function updateCafeList(cafeList) {
var cafeListElement = $(".linkbox1"); // 카페 리스트 요소 선택
var searchResult = $("#search-result"); // 검색 결과 요소 선택
cafeListElement.empty(); // 카페 리스트 요소 비우기
cafeList.forEach(function(cafe) { // 각 카페에 대해 반복
var cafeItem = $(`
<div class="cafe-item">
<a href="cafeDetail?id=`+cafe.id+`" class="linkbox1">
<div class="content-info-box" style="margin-bottom: 50px">
<div class="cafe-img-box">
<img src="`+cafe.cafeImgUrl1+`" alt="카페 이미지" />
</div>
<div class="name-address">
<div class="cafe-name">`+cafe.name+`</div>
<p class="cafe-address">`+cafe.address+`</p>
</div>
<div class="like-count">
<span class="material-symbols-outlined"> favorite </span>
<div class="like-count-num">`+cafe.cafeScrapCount+`</div>
</div>
<div class="review-count">
<div class="title-review">리뷰</div>
<div class="review-count-num">`+cafe.reviewCount+`</div>
</div>
<div class="show-distance">
<div class="num-km-group">
<div class="km">km</div>
<div class="distance-num">1.8</div>
</div>
</div>
<div class="hashtag">`+cafe.hashtag+`</div>
</div>
</a>
</div>
`); // end var cafeItem
searchResult.append(cafeItem); // 카페 리스트에 카페 아이템 추가
});