차근차근 개발자 되기

Spring

98일차: Spring 검색 게시판 / Ajax 댓글 게시판_2021.11.05

wellow 2021. 11. 5. 22:39

 

목차

1.      검색 기능 게시판

2.      Spring Ajax 댓글 기능 게시판

 

 

1. 검색 기능 게시판  

 

1) 글 작성

- 원문을 작성하는 파일과 댓글을 작성하는 파일이 같으면 시퀀스로 번호 값을 매길 수 없다. 따라서 글 번호의 최대값을 구하고 + 1을 하는 방식으로 번호 값을 구해야 한다.

 

2) 글 목록

- 키워드로 검색한 글의 목록을 가져올 때 동적 SQL문을 사용한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<select id="list" parameterType="board" resultMap="boardResult">
    select * from (select a.*,rowNum rn from (
        select * from board
    <where>
        <if test="keyword != null and search!='subcon'">
            ${search} like '%'||#{keyword}||'%'
        </if>
        <if test="keyword != null and search=='subcon'">
            subject like '%'||#{keyword}||'%' or
            content like '%'||#{keyword}||'%'
        </if>
    </where>            
            order by ref desc,re_step) a )    
            where rn between #{startRow} and #{endRow}
</select>
cs

 

 

 

2. Spring Ajax 댓글 기능 게시판     

 

- 게시글의 상세페이지 내에서 댓글 기능을 구현할 수 있는데, 비동기 방식인 Ajax로 처리해야 한다.

 

1) 테이블 설정

- 댓글 테이블에는 부모글의 번호 값이 참조키(foreign key)로 들어간다.

 

예시

1
2
3
4
5
6
7
8
9
drop table replyBoard;
create table replyBoard (
    rno number primary key,
    bno number not null references board(num),
    replytext varchar2(500not null,
    replyer varchar2(50not null,
    regdate date not null,
    updatedate date not null
);
cs

 

 

3) 파라미터 전달 방법

- 스프링에서 파라미터를 전달하는 방법은 여러가지가 있다. 물음표(?)를 이용해서 get 방식으로 값을 전달할 수도 있고(ex. list.do?pageNum=1), 슬래쉬(/)를 이용해서 값을 전달할 수도 있다(ex. num/${board.num}/pageNum/${pp.currentPage} ).

- 슬래쉬로 값을 전달하면 컨트롤러에서는 @pathVariable 어노테이션을 이용해서 값을 받는다.

 

예시

1
2
3
4
5
6
7
8
9
// 댓글 목록 구하기
    @RequestMapping("/slist/num/{num}")
    public String slist(@PathVariable int num, Model model) {
        Board board = bs.select(num);
        List<ReplyBoard> slist = rbs.list(num);
        model.addAttribute("slist", slist);
        model.addAttribute("board", board);
        return "slist";
    }
cs

 

 

 

3) Ajax serialize() 함수

- Ajax에서는 form 요소를 전달받을 때 값을 일일이 받지 않고 serialize() 함수를 이용해서 직렬화를 통해 한꺼번에 받을 수 있다.

 

예시

1
2
3
4
5
6
7
8
9
var frmData = $('form').serialize();
    // var frmData = 'replyer='+frm.replyer.value+'&bno='+
    //                  frm.bno.value+'&replytext='+frm.replytext.value;                  
    // $.post(); -> post 방식으로 전송
    // $post('요청 이름', '전달될 값', '콜백 함수')
    $.post('${path}/sInsert', frmData, function(data) {
        $('#slist').html(data);
            frm.replytext.value = '';
    });
cs