[Spring] 게시판 검색

dsunni·2020년 7월 8일

Spring으로 게시판 형식의 검색을 구현하고자 한다.

동일한 페이지에서 검색 버튼만 클릭시 테이블의 데이터만 변경해보자.

다음과 같이 유형, 분류 등을 선택하고 조회버튼을 클릭하면 원하는 데이터를 가져온다.


1. list.jsp 수정

<div class="input-group" >
    <span class="input-group-addon" id="basic-addon1">CDA 유형</span>
    <div class="btn-group">         
        <select id="cda_type" name="cda_mapping" style="height:30px;">
            <option>PC/Server</option>
            <option>A.1</option>
            <option>A.2</option>
        </select>
    </div>
    <span class="input-group-addon" id="basic-addon1">점검 분류</span>
    <div class="btn-group">
        <select id="groupList" name="inspect_group"  style="height:30px;" onchange="categoryChange(this)">
            <option value="" selected>점검 분류 선택</option>
            <c:forEach var="group" items="${groupList}">
                <option value="${group.code_type_no}">${group.code_type_name}</option>
            </c:forEach>
        </select>

    </div>
    <span class="input-group-addon" id="basic-addon1">점검 항목</span>
    <div class="btn-group">
        <select id="insSelectList" name="inspect_group_list" style="width:440px; height:30px;">
            <option value="" >점검 항목명</option>
        </select>
    </div>
</div>

<div align="right">
    <button class="btn btn-primary" name="btnSearch" id="btnSearch">조회</button>
</div>  



<script>
    $(document).on('click', '#btnSearch', function(e) {
        e.preventDefault();
        var url = "${pageContext.request.contextPath}/inspection/list";
        url = url + "?cda_mapping=" + $('#cda_type').val();
        url = url + "&inspect_group=" + $('#groupList').val();
        url = url + "&inspect_group_list=" + $('#insSelectList').val();

        location.href = url;
        console.log(url);
    });
</script>
  • javascript에서 버튼 클릭 이벤트를 추가하고 url을 보낸다.

  • var url = "${pageContext.request.contextPath}/inspection/list";



2. 동적 SQL

trim

  • prefix : trim문 가장 앞에 붙여준다.
  • prefixOverrides : trim문 안에 쿼리 가장 앞에 해당하는 문자들이 있으면 자동으로 지워준다

<trim prefix="WHERE" prefixOverrides="AND|OR">
	<if test="cda_mapping != null and cda_mapping != ''">
		Cda_mapping = #{cda_mapping} 
		<if test="inspect_group != ''">
			AND i.Inspect_group = #{inspect_group} 
			AND i.Inspect_group_list = #{inspect_group_list}
		</if>
	</if>
</trim>
  • trim을 통해 WHERE절을 동적으로 추가할 수 있다.
  • 또한 파라미터로 넘어오는 값이 존재한다면 / 존재하지 않는다면 등 if절도 사용 가능하다


3. Search 객체 생성

Search.java

public class Search {
    private String cda_mapping;
    private String inspect_group;
    private String inspect_group_list;

    public Search() {}

    public String getCda_mapping() {
        return cda_mapping;
    }
    public void setCda_mapping(String cda_mapping) {
        this.cda_mapping = cda_mapping;
    }
    public String getInspect_group() {
        return inspect_group;
    }
    public void setInspect_group(String inspect_group) {
        this.inspect_group = inspect_group;
    }
    public String getInspect_group_list() {
        return inspect_group_list;
    }
    public void setInspect_group_list(String inspect_group_list) {
        this.inspect_group_list = inspect_group_list;
    }
}
  • Mapper로 값을 전달하기 위해 Search 객체를 생성한다.



4. Controller, Service, DAO 수정

listController

public String getInspectionList(Model model
			, @RequestParam(required=false) String cda_mapping
			, @RequestParam(required=false) String inspect_group
			, @RequestParam(required=false) String inspect_group_list) throws Exception{
		logger.info("getInspectionList::::");
		logger.info("cda_mapping = " + cda_mapping + " inspect_group = " + inspect_group
					+ " inspect_group_list = " + inspect_group_list);
		
		// 검색 객체 생성
		Search search = new Search();
		search.setCda_mapping(cda_mapping);
		search.setInspect_group(inspect_group);
		search.setInspect_group_list(inspect_group_list);
		
		// 기술적 보안조치항목 리스트
		List<InspectionResultVO> iresultvoList = new ArrayList<InspectionResultVO>();
		iresultvoList = inspectService.getInspectionResultList(search);
		model.addAttribute("list", iresultvoList);	
    
    	...
        ...
}
  • 검색 객체를 생성하고 RequestParam을 넣어준다.

  • iresultvoList = inspectService.getInspectionResultList(search);

    • search객체를 파라미터로 넘겨준다.
    • 이후 Service, DAO 등 다 수정해준다.

RequestParam

  • RequestParam은 Spring MVC에서 쿼리 스트링 정보를 쉽게 가져오기 위해 사용한다.
  • 만약 요청 쿼리 스트링에 RequestParam이 존재하지 않으면 Bad Request 에러가 나타난다.
  • 따라서 @RequestParam(required = false) 를 추가해 파라미터로 해당 값이 넘어오지 않아도 에러가 발생하지 않게끔 설정할 수 있다.

DAO

@Override
public List<InspectionResultVO> getInspectionResultList(Search search) {
    return sqlSession.selectList("inspectionMapper.getInspectionResultList", search);
}

profile
https://dsunni.tistory.com/ 이사갑니답

0개의 댓글