본문 바로가기
수업 일지/Spring

68일차 - [Spring] 게시판 기능 구현

by 쿠쿠씨 2022. 4. 14.
반응형

글 목록 화면 URL의 파라미터 없애기

get 방식 → post 방식으로 변경합니다.

<a> 태그에서 href 속성 대신에 onclick 속성에 자바스크립트 함수를 사용합니다.

<button> 태그에서는 onclick 속성에 함수 이름만 작성해도 되지만,

<a> 태그에서는 함수 이름 앞에 자바스크립트 함수라는 것을 명시합니다. (<a onclick="javascript : 함수이름">)

 

form을 post 방식으로 작성하고 input요소의 name을 "pageNo", type을 "hidden"으로 합니다.

<form action="" method="post">
	<input name="pageNo" type="hidden">
</form>

 

goPage 함수로 /list 페이지에 폼 데이터를 전송합니다.

<script type="text/javascript">
	function goPage(no){
		const frm = document.forms[0];
		frm.action='list';
		frm.pageNo.value=no;
		frm.submit();
	}
</script>

 

기존 URL

 

변경 URL

 

개발자도구(F12)에서 [Network] - [Payload] 에서 폼 데이터 pageNo를 확인할 수 있습니다.

 

글쓰기, 글 상세 보기, 조회수 증가 기능 구현

글쓰기 버튼을 눌러 글을 작성하고 저장합니다.

글 목록에서 글의 제목을 클릭하면 상세 내용이 출력됩니다.

글 상세 내용 화면에서 목록 버튼을 클릭하면 이전 페이지의 글 목록으로 이동합니다.

글의 내용 조회 시 조회수가 1 증가합니다.

 

Mapper 인터 페이스

public interface FreeboardMapper {
	List<Freeboard> getPageList(Map<String,Integer> map);
	int getCount();
	void insert(Freeboard dto);
	void update(Freeboard dto);
	Freeboard getOne(int idx);
	void readCount(int idx);
}

insert : 글쓰기 기능에 사용됩니다.

getOne : 글 상세 보기 기능에 사용됩니다.

readCount : 조회수 증가 기능에 사용됩니다.

 

Model - Freeboard.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Freeboard {
	private int idx;
	private String name;
	private	String password;
	private String subject;
	private String content;
	private int readCount;
	private Date wdate;
	private String ip;
	private int commentCount;

}

 

글쓰기 기능 구현

XML 매퍼 파일

<insert id="insert" parameterType="Freeboard">
	INSERT INTO freeboard (idx,name,password,subject,content)
	VALUES (board_idx_seq.nextval,#{name},#{password},#{subject},#{content})
</insert>

 

View

 

Controller

@GetMapping("/insert")
	public String insert(int pageNo, Model model) {
	model.addAttribute("page",pageNo);
		
	return "community/insert";
}
@PostMapping("/insert")
public String save(Freeboard dto) {
	mapper.insert(dto);
	return "redirect:list";	//1페이지로 이동
}

@GetMapping은 글 목록 페이지에서 [글쓰기] 버튼을 눌렀을 때 실행됩니다.

 글쓰기 페이지에서 [목록으로] 버튼을 눌렀을 때 원래 페이지로 돌아가기 위해 pageNo 파라미터를 가져옵니다.

@PostMapping은 글쓰기 페이지에서 [저장] 버튼을 눌렀을 때 실행됩니다.

 

글 상세 보기 기능 구현

XML 매퍼 파일

<select id="getOne" parameterType="int" resultType="Freeboard">
	SELECT * FROM freeboard WHERE idx=#{idx}
</select>

freeboard 테이블에서 특정 idx(글번호)의 모든 컬럼을 조회합니다.

 

Controller

	@GetMapping("/detail")
	public String detail(int idx, int pageNo, Model model) {
		//조회수 증가

		Freeboard bean = mapper.getOne(idx);
		model.addAttribute("bean",bean);
		model.addAttribute("page",pageNo);
		
		//댓글 목록을 detail.jsp에 출력

		return "community/detail";
	}

글 목록 페이지에서 글 제목을 누르면 해당 글 번호(idx)와 이전 페이지 넘버(pageNo)가 파라미터로 넘어옵니다.

getOne 메소드로 DB에 저장된 글의 데이터를 가져와 bean 애트리뷰트에 전달합니다.

pageNo는 page 애트리뷰트에 전달합니다.

 

View - detail.jsp

Controller에서 받은 애트리뷰트를 출력합니다.

<pre> 태그로 줄바꿈 입력을 받아올 수 있습니다.

목록 버튼을 누르면 이전 페이지(pageNo 페이지)로 돌아갑니다.

 

조회수 증가 기능 구현

XML 매퍼 파일

<update id="readCount" parameterType="int">
	UPDATE freeboard SET readCount=readCount+1 WHERE idx=#{idx}
</update>

freeboard 테이블에서 특정 idx(글번호)의 readCount(조회수)를 1 증가시킵니다.

 

View

 

Controller

반응형

댓글