[스프링SPRING]스프링게시판4: 글 상세 내용 보기

BoardController.java 코드 추가

  • @ModelAttribute 와 @RequestParam 란
    • @ModelAttribute : model객체를 사용하는 것이므로 주소줄에 나타나지 않게 할 수 있다.
    • @RequestParam : request.getParameter()와 동일한 의미로 사용하나 String뿐만 아니라 데이터타입 상관없이 처리가능 하다.(문자열, 정수형, 날짜) => 단순 타입(ex기본형 데이터등)은 어노테이션 생략가능.
    • 차이점이 존재한다.
    • @ModelAttribute뿐만 아니라 @RequestParam에서 Map 데이터타입으로 여러개 파라미터를 받아 올 수 있다. 즉 두 파라미터 다 여러 개의 파라미터를 받을 수 있지만 주로 1:!은 @RequestParam을 사용하고 메인이나 오브젝트로 파라미터를 받을 경우는 @ModelAttribute으로 받는다.
    • 두 어노테이션 다 생략가능하지만 명시해주는 게 좋음.
1
2
3
4
5
6
7
8
9
10
//글번호에 해당하는 게시글 상세 보기
@RequestMapping(value = "/read", method = RequestMethod.GET)
//@ModelAttribute 와 @RequestParam 둘 다 동일한 결과
//public void readGET(@ModelAttribute("bno") int bno) throws Exception{ //0출력
public void readGET(@RequestParam("bno") int bno, Model model) throws Exception{ //0출력
l.info("C: read 겟 메서드, 글번호: "+(bno*0));
//서비스객체 : 해당 글번호를 사용하여 글 정보 가지고오기
model.addAttribute("bvo", service.readContent(bno));

}




read.jsp 뷰 연결

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%@ include file="../include/header.jsp" %>

<!-- Main content -->
<section class="content">
<div class="row">
<!-- left column -->
<div class="col-md-12">
<!-- general form elements -->
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">ITWILL 게시글 상세페이지</h3>
</div>
<!-- /.box-header -->

<!-- 글 번호 가져가지고 페이지이동 2번째 방법 -->
<form method="post" role="form">
<input type="hidden" name="bno" value="${bvo.bno }">
</form>

<!-- 바디 -->
<div class="box-body">
<div style="text-align: center;">
<span class="form-group">
<label for="exampleInputEmail">글번호</label>
<input type="text" name="title" class="form-control" style="width:200px;display:inline;margin-right:100px;" value="${bvo.bno}" readonly>
</span>
<span class="form-group">
<label for="exampleInputEmail">글쓴이</label>
<input type="text" name="writer" class="form-control" style="width:200px;display:inline;margin-right:100px;" value="${bvo.writer}" readonly>
</span>
<span class="form-group">
<label for="exampleInputEmail">작성일자</label>
<input type="text" name="writer" class="form-control" style="width:200px;display:inline;margin-right:100px;" value="${bvo.regdate}" readonly>
</span>
</div>
<div class="form-group">
<label for="exampleInputEmail">제목</label>
<input type="text" name="title" class="form-control" value="${bvo.title}" readonly>
</div>
<div class="form-group">
<label for="exampleInputEmail">내용</label>
<textarea name="content" rows="5" class="form-control" readonly>${bvo.content}</textarea>
</div>
</div>
<div class="box-footer">
<button type="submit" class="btn btn-warning" >글 수정</button>
<button type="submit" class="btn btn-danger" >글 삭제</button>
<button type="submit" class="btn btn-primary" >글 목록으로</button>
</div>

<!-- 바디 끝 -->
</div>
<!-- /.box -->
</div>
<!--/.col (left) -->
</div>
<!-- /.row -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->

<script type="text/javascript">
$(document).ready(function(){

//form 오브젝트 출력
//console.log()가 alert()보다 더 많은 정보를 출력해준다.
let formObj = $("form[role='form']");
//alert(formObj);
//console.log(formObj);

//목록
$(".btn-primary").on("click", function(){
<!-- 글 번호 가져가지고 페이지이동 첫번째 방법 -->
//let tmp = '${bvo.bno}';
//alert("목록으로 가기 버튼 클릭"+tmp);
location.href="/board/listAll";
});

//수정버튼 클릭시
$(".btn-warning").click(function(){
//alert("수정버튼클릭");
//formObj.attr("action","/board/modify", "method","get").submit(); 잘못된 문법인데 왜 작동할까?
formObj.attr({
action: "/board/modify",
method: "get",
}).submit();
});

})//end of jQuery
</script>
<%@ include file="../include/footer.jsp" %>




BoardService.java 인터페이스에 메서드 추가

  • 캐스팅이 되는 데이터타입은 wapper클래스로 파라미터 데이터타입을 지정하는 것이 혹시모를 데이터 손실을 예방할 수 있다.
    • int -> Integer
1
2
3
//글번호에 해당하는 게시글 상세 보기
//public BoardVO readContent(int bno) throws Exception;
public BoardVO readContent(Integer bno) throws Exception;




BoardServiceImpl.java 메서드 오버라이딩 코드 추가

1
2
3
4
5
6
//글번호에 해당하는 게시글 상세 보기
@Override
public BoardVO readContent(Integer bno) throws Exception {
BoardVO bvo = bdao.readContent(bno);
return bvo;
}




BoardDAO.java 인터페이스에 메서드 추가

1
2
//글번호에 해당하는 게시글 상세 보기
public BoardVO readContent(Integer bno) throws Exception;




BoardDAOImpl.java 메서드 오버라이딩 코드 추가

1
2
3
4
5
6
//글번호에 해당하는 게시글 상세 보기
@Override
public BoardVO readContent(Integer bno) throws Exception {
//sqlSession 객체 사용하여 Mapper 호출
return session.selectOne(namespace+".readContent", bno);
}




BoardMapper.xml SQL쿼리 추가

1
2
3
4
<select id="readContent" resultType="BoardVO">
select * from tbl_board
where bno =#{bno}
</select>