구현 내용
1.검색 조건을 선택하면 그에 따른 입력 form이 나옴.
‘기간’의 경우 사용자가 임의로 입력할 수 없도록 Datepicker 를 사용하여 날짜를 선택할 수 있도록 함.
2.원하는 검색 조건을 입력 후 ‘검색버튼’을 클릭하면 검색된 리스트가 ‘전체 공연’ 리스트에 나옴.
핵심코드
[HomeServiceImpl.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
@Override
public void list(HttpServletRequest request) {
//검색과 관련된 파라미터를 읽어와 본다.
String keyword=request.getParameter("keyword");
String condition=request.getParameter("condition");
String startdate=request.getParameter("startDate");
String enddate=request.getParameter("endDate");
String startdateFormat="";
String enddateFormat="";
if(startdate!=null && startdate!=null){
String[] startdateArr=startdate.split("-");
String[] enddateArr=enddate.split("-");
for(int i=0; i<startdateArr.length; i++) {
startdateFormat+=startdateArr[i];
}
for(int i=0; i<enddateArr.length; i++) {
enddateFormat+=enddateArr[i];
}
}
FullCalendarDto dto=new FullCalendarDto();
if(keyword!=null || (startdate!=null && startdate!=null)) {
if (condition.equals("title")) {//제목 검색
dto.setTitle(keyword);
}else if (condition.equals("place")) {//장소 검색
dto.setPlace(keyword);
}else if (condition.equals("date")) {//기간 검색
dto.setStartdate(startdateFormat);
dto.setEnddate(enddateFormat);
}
String encodedKeyword=null;
if(keyword!=null) {
try {
encodedKeyword=URLEncoder.encode(keyword, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
//키워드와 검색조건을 request 에 담는다.
request.setAttribute("keyword", keyword);
request.setAttribute("encodedKeyword", encodedKeyword);
request.setAttribute("condition", condition);
request.setAttribute("startdate", startdate);
request.setAttribute("enddate", enddate);
request.setAttribute("startdateFormat", startdateFormat);
request.setAttribute("enddateFormat", enddateFormat);
}//if end
//페이징 처리 코드 생략
}
|
cs |
12행-24행 : 2020-01-01 형태로 전달되는 문자열을 20200101 형태로 변경
26행-44행 : 검색키워드 또는 시작, 종료 날짜가 request에 전달된다면 dto에 담아준다.
[전달되는 경우]
(1)검색어를 입력하고 검색 버튼을 누른 경우
(2)이미 검색을 한 상태에서 하단 페이지 번호를 누른 경우
[전달 되지 않는 경우]
(1) navbar 에서 cafe를 누른경우
검색 키워드에 한글이 포함 되어 있는 경우,
링크에 그대로 출력하기 위해 인코딩
[HomeMapper.xml]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<select id="getCount" parameterType="fullCalendarDto" resultType="int">
SELECT NVL(MAX(ROWNUM), 0)
FROM tb_api_date
<choose>
<when test="startdate != null and enddate != null">
<![CDATA[
WHERE startdate>=to_date(${startdate},'yyyymmdd') AND startdate<=to_date(${enddate},'yyyymmdd')) result2
]]>
</when>
<when test="title != null">
WHERE title LIKE '%${title}%'
</when>
<when test="place != null">
WHERE place LIKE '%${place}%'
</when>
</choose>
</select>
<select id="getList" parameterType="fullCalendarDto" resultType="fullCalendarDto">
SELECT *
FROM (SELECT result1.*, ROWNUM AS rnum
FROM (SELECT seq, title, TO_CHAR(startdate,'YYYY/MM/DD') AS startdate, TO_CHAR(enddate,'YYYY/MM/DD') AS enddate, place, thumbnail, likecount
FROM tb_api_date
<choose>
<when test="startdate != null and enddate != null">
<![CDATA[
WHERE startdate>=to_date(${startdate},'yyyymmdd') AND startdate<=to_date(${enddate},'yyyymmdd')
]]>
</when>
<when test="title != null">
WHERE title LIKE '%${title}%'
</when>
<when test="place != null">
WHERE place LIKE '%${place}%'
</when>
</choose>
ORDER BY startdate DESC
) result1)
WHERE rnum BETWEEN #{startRowNum} AND #{endRowNum}
</select>
|
cs |
1행-17행 : 검색을 어떤 키워드로 했는지에 따라 select되는 data의 개수가 달라진다. 따라서 경우에 따라 동적으로 쿼리문을 구성해 줘야한다.
19행-41행 : 검색을 어떤 키워드로 했는지에 따라 select되는 data가 달라진다. 따라서 동적으로 쿼리문을 구성해 줘야한다.
- 검색 조건이 ‘기간’인 경우
공연 시작일이 검색조건의 시작일과 종료일 사이에 있는 공연들을 조회한다. - 검색 조건이 ‘제목’, ‘장소’인 경우
검색 키워드가 들어 있는 data를 조회해 list에 보여준다.
'프로젝트' 카테고리의 다른 글
[Home/전체공연List/상세페이지] Open API에서 갖고온 데이터 출력 (0) | 2020.04.09 |
---|---|
[Home/전체공연List/상세페이지]상세페이지-공공데이터 포털에서 OPEN API 로 Request 보내고 Response 받기(feat. XML 문서 파싱) (0) | 2020.04.08 |
[전체공연List]전체 공연 출력하기 / 페이징 처리 (0) | 2020.04.08 |
[Home]인기공연 출력하기(owl.carousel) (0) | 2020.04.08 |
[Home]공연 정보 fullcalendar에 출력하기 (Fullcalendar/Ajax) (1) | 2020.04.08 |