반응형
저번에 글 목록 보기 기능까지 만들었다.
이번에는 전체 글 목록 보기에서 제목을 클릭하면 해당 글의 자세한 내용을 보여주는 기능을 구현할 것이다.
list.jsp
list.jsp에서 타이틀에 링크를 입력해준다. 이때, 글 번호도 같이 전송한다. 그러면 아래와 같이 하이퍼링크가 타이틀에 걸리게 된다.
- pageContext.request.contextPath : 경로를 알아서 찾아주는 값이라 생각하면 된다. (상대경로)
<td><a href = "${pageContext.request.contextPath }/board/detail?num=${vo.num}"> ${vo.title }</a> </td>
<tr>
<td> ${vo.num } </td>
<td><a href = "${pageContext.request.contextPath }/board/detail?num=${vo.num}"> ${vo.title }</a> </td>
<td> ${vo.writer } </td>
</tr>
BoardDetail.java
request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); |
한글 깨짐 방지 인코딩 |
int num = Integer.parseInt(request.getParameter("num")); | 이전 페이지에서 보낸 num 값을 받아옴 |
//서비스 객체로 글 검색 BoardService service = new BoardService(); BoardVo vo = service.getBoard(num); request.setAttribute("vo", vo); RequestDispatcher dis = request.getRequestDispatcher("/board/detail.jsp"); dis.forward(request, response); |
서비스 객체를 생성해 getBoard (num으로 검색) 서비스를 이용한다. |
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
int num = Integer.parseInt(request.getParameter("num"));
//서비스 객체로 글 검색
BoardService service = new BoardService();
BoardVo vo = service.getBoard(num);
request.setAttribute("vo", vo);
RequestDispatcher dis = request.getRequestDispatcher("/board/detail.jsp");
dis.forward(request, response);
}
detail.jsp
이전 페이지에서 넘버를 받아 detail.jsp 페이지로 이동한다.
<body> <c:if test="${sessionScope.loginId!=vo.writer }"> <c:set var="str"> readonly</c:set> </c:if> |
<c:if> 를 이용해 loginId가 vo.writer 과 동일하지 않으면 <c:set> 을 보여준다. <c:set> 은 변수명 str, 값 readonly이다. 즉, loginId != vo.writer 일 때 readonly가 나타난다. |
<h3>글 상세페이지</h3> <a href="${pageContext.request.contextPath }/board/list"> 글목록</a> <br /> |
글목록으로 다시 돌아갈 수 있도록 하이퍼링크를 넣어주었다. |
<form action="${pageContext.request.contextPath}/board/edit" method="post"> | 테이블에서 submit을 누르면 board/edit의 post메소드로 이동하도록 한다. |
<table border="1"> <tr> <th>글번호</th> <td><input type="text" name="num" value="${vo.num }"></td> </tr> <tr> <th>작성일</th> <td><input type="text" value="${vo.date }" readonly></td> </tr> <tr> <th>작성자</th> <td><input type="text" name="writer" value="${vo.writer}" readonly></td> </tr> |
바뀌지 않는 값들은 readonly로 편집할 수 없게 해준다. |
<tr> <th>제목</th> <td><input type="text" name="title" value="${vo.title }" ${str }></td> </tr> <tr> <th>내용</th> <td><textarea rows="20" cols="30" name="content" ${str }>${vo.content}</textarea></td> </tr> |
${str} 을 넣어 작성자가 일치할 때 텍스트를 수정할 수 있도록 한다. |
<c:if test="${sessionScope.loginId ==vo.writer }"> <tr> <th>수정/삭제</th> <td><input type="submit" value="수정" > |
<c:if> 를 이용해 loginId가 vo.writer 과 동일하면 수정/삭제 버튼이 나타나도록 한다. submit에 수정 값을 넣어 submit을 누르면 form action = "/board/edit" 이 동작하도록 한다. |
<a href="${pageContext.request.contextPath }/board/delete?num=${vo.num}"><input type="button" value="삭제"></a></td> </tr> </c:if> </table> |
button 타입에 삭제를 넣어 <a href> 태그로 /board/delete와 연결해준다. 이때, num을 받아가 num으로 값 삭제하기 서비스를 서블릿에서 이용한다. |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:if test="${sessionScope.loginId!=vo.writer }">
<c:set var="str"> readonly</c:set>
</c:if>
<h3>글 상세페이지</h3>
<a href="${pageContext.request.contextPath }/board/list"> 글목록</a>
<br />
<form action="${pageContext.request.contextPath}/board/edit" method="post">
<table border="1">
<tr>
<th>글번호</th>
<td><input type="text" name="num" value="${vo.num }"></td>
</tr>
<tr>
<th>작성일</th>
<td><input type="text" value="${vo.date }" readonly></td>
</tr>
<tr>
<th>작성자</th>
<td><input type="text" name="writer" value="${vo.writer}" readonly></td>
</tr>
<tr>
<th>제목</th>
<td><input type="text" name="title" value="${vo.title }" ${str }></td>
</tr>
<tr>
<th>내용</th>
<td><textarea rows="20" cols="30" name="content" ${str }>${vo.content}</textarea></td>
</tr>
<c:if test="${sessionScope.loginId ==vo.writer }">
<tr>
<th>수정/삭제</th>
<td><input type="submit" value="수정" >
<a href="${pageContext.request.contextPath }/board/delete?num=${vo.num}"><input type="button" value="삭제"></a></td>
</tr>
</c:if>
</table>
</form>
반응형