myHomeFilterList .drawio.png

myHomeList. jsp

function filteringSort() {
    const housingType = $('#boardMyhomeHousingType').val();
    const homeSize = $('#boardMyhomeHomeSize').val();

    $.ajax({
        type: "GET",
        url: "/gami/board/board_myhome/filterList.do",
        data: {
        	housingType: housingType,
        	homeSize: homeSize
        },
        success: function(html) {
            $('.grid-wrapper').html(html); // 게시글 영역만 교체
        },
        error: function() {
            alert('게시글 필터링 실패');
        }
    });
}

$(document).ready(function() {
    $('#boardMyhomeHousingType, #boardMyhomeHomeSize').on('change', function() {
        filteringSort();
    });
});

controller

// 필터링 적용, 게시글 조각 업데이트
    @RequestMapping(value = "/filterList.do", method = RequestMethod.GET)
    public void myHomeFilterList(@RequestParam(required = false) String housingType,
                                 @RequestParam(required = false) String homeSize,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws Exception {
  		
    	System.out.println("housingType 넘어옴?"+housingType+"homeSize는?"+homeSize);
    	
    	 List<MyhomeDomain> filteredList = myhomeService.filterArticles(housingType, homeSize);
    	    request.setAttribute("myhomeList", filteredList);

    	    // Tiles나 ViewResolver를 거치지 않고 JSP 파일로 직접 포워딩
    	    request.getRequestDispatcher("/WEB-INF/views/board/board_myhome/myHomeListFragment.jsp")
    	           .forward(request, response);
  	}
    

board.xml

<select id="selectFilterArticlesList" resultMap="MyhomeResultMap">
	  <![CDATA[
	    SELECT *
	    FROM (
	        SELECT 
	            b.boardMyhomeArticleNo,
	            b.memberId,
	            b.boardMyhomeTitle,
	            b.boardMyhomeContents,
	            b.boardMyhomeLikes,
	            b.boardMyhomeViews,
	            b.boardMyhomeUpdated,
	            b.boardMyhomeHomeSize,
	            b.boardMyhomeHousingType,
	            i.imagefilename,
	            ROW_NUMBER() OVER (ORDER BY b.boardMyhomeUpdated DESC) AS recNum
	        FROM boardMyhome b
	        JOIN image i ON b.boardMyhomeArticleNo = i.articleNo
	        WHERE i.imagetype = '커버'
	  ]]>
	    <if test="boardMyhomeHousingType != null and boardMyhomeHousingType != ''">
	      AND b.boardMyhomeHousingType = #{boardMyhomeHousingType}
	    </if>
	    <if test="boardMyhomeHomeSize != null and boardMyhomeHomeSize != ''">
	      AND b.boardMyhomeHomeSize = #{boardMyhomeHomeSize}
	    </if>
	  <![CDATA[
	    ) filtered
	  ]]>
	</select>

myHomeListFragment.jsp

<div class="grid-container">
	<c:choose>
		<c:when test="${not empty myhomeList}">
			<c:forEach var="article" items="${myhomeList}">
				<div class="card">
					<!-- 썸네일 -->
					<div class="thumbnail">
						<c:choose>
							<c:when test="${not empty article.boardMyhomeArticleNo}">
								<a
									href="${contextPath }/board/board_myhome/viewCount.do?boardMyhomeArticleNo=${article.boardMyhomeArticleNo}">
									<img
									src="${contextPath}/board/board_myhome/myHomeCoverImages.do?articleNo=${article.boardMyhomeArticleNo}&image=${article.imageFileName}"
									alt="커버 이미지">
								</a>
							</c:when>
							<c:otherwise>
                                (이미지 없음)
                            </c:otherwise>
						</c:choose>
					</div>

					<!-- 게시글 정보 -->
					<div class="card-content">
						<h3>
							<a
								href="${contextPath}/board/board_myhome/viewCount.do?boardMyhomeArticleNo=${article.boardMyhomeArticleNo}">
								${article.boardMyhomeTitle} </a>
						</h3>
						<p>작성자: ${article.memberId}</p>
						<p>❤️ ${article.boardMyhomeLikes} | 👀${article.boardMyhomeViews} | 💬 ${article.totalReply}</p>
						<p>${article.boardMyhomeUpdated}</p>
					</div>
				</div>
			</c:forEach>
		</c:when>
		<c:otherwise>
			<p>해당 조건에 맞는 게시글이 없습니다.</p>
		</c:otherwise>
	</c:choose>
</div>