글 목록 화면 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
'수업 일지 > Spring' 카테고리의 다른 글
70일차 - [Spring] Interceptor/RedirectAttributes (0) | 2022.04.18 |
---|---|
69일차 - [Spring] 게시판 기능 구현2 (0) | 2022.04.15 |
67일차 - [Spring] 게시판 페이징 처리 (0) | 2022.04.13 |
66일차 - [Spring] 파일 업로드 (0) | 2022.04.13 |
65일차 - [Spring] Model/@ModelAttribute/@SessionAttribute (0) | 2022.04.11 |
댓글