반응형
noticeUpdateForm
- input태그는 속성값을 value로 넣어야 하고, textarea는 <textarea></textarea> 사이에 넣어야 한다.
- history.back() : 페이지 뒤로 가기
<%
Notice n = (Notice)request.getAttribute("n");
// 글번호, 제목, 내용, 작성자Id, 작성일
%>
<%@ include file="/views/common/menubar.jsp"%>
<div class="outer">
<br> <h2 align="center">공지글 수정</h2>
<form action="<%=contextPath%>/update.no" id="updateForm" method="post">
<input type="hidden" name="nno" value="<%=n.getNoticeNo()%>">
<table align="center">
<tr>
<th width="50px">제목</th>
<td width="400px"><input type="text" name="title" value="<%=n.getNoticeTitle() %>" required></td>
</tr>
<tr>
<th>내용</th>
<td></td>
</tr>
<tr>
<td colspan="2">
<textarea name="content" id="" cols="50" rows="20" style="resize:none;" required><%=n.getNoticeContent() %></textarea>
</td>
</tr>
</table>
<div align="center">
<button type="submit">수정</button>
<button type="button" onclick="history.back()">뒤로가기</button>
</div>
</form>
</div>
NoticeUpdateFormController
- serlvet으로 작성한다.
- 매핑값 updateForm.no
- String 타입으로 넘어온 키값 nno(글번호)를 int 타입으로 강제형변환한다.
@WebServlet("/updateForm.no")
public class NoticeUpdateFormController extends HttpServlet {
private static final long serialVersionUID = 1L;
public NoticeUpdateFormController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int noticeNo = Integer.parseInt(request.getParameter("nno"));
Notice n = new NoticeService().selectNotice(noticeNo);
// 글번호, 제목, 내용, 작성자, 작성일
request.setAttribute("n", n);
request.getRequestDispatcher("views/notice/noticeUpdateForm.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
NoticeUpdateController
- servlet으로 작성한다.
- 매핑값 update.no
- String 타입으로 넘어온 키값 nno(글번호)를 int 타입으로 강제형변환한다.
- 수정할 폼을 받아 NoticeService로 updateNotice() 메소드에 n을 담아 넘긴다.
@WebServlet("/update.no")
public class NoticeUpdateController extends HttpServlet {
private static final long serialVersionUID = 1L;
public NoticeUpdateController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); // 인코딩
int noticeNo = Integer.parseInt(request.getParameter("nno"));
String noticeTitle = request.getParameter("title");
String noticeContent = request.getParameter("content");
Notice n = new Notice();
n.setNoticeNo(noticeNo);
n.setNoticeTitle(noticeTitle);
n.setNoticeContent(noticeContent);
int result = new NoticeService().updateNotice(n);
if(result > 0) {
// 공지사항 수정에 성공 시 alert창 띄우고
// NoticeDetailController(매핑값 detail.no)로 다시 응답하기
request.getSession().setAttribute("alertMsg", "공지사항이 수정되었습니다.");
response.sendRedirect(request.getContextPath()+"/detail.no?nno="+noticeNo);
} else {
// 공지사항 수정에 실패 시 error창 띄우고 에러페이지로 보내기
request.setAttribute("errorMsg", "공지사항 수정에 실패하였습니다.");
request.getRequestDispatcher("views/common/errorPage.jsp").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
NoticeDeleteController
- servlet으로 작성한다.
- 매핑값 delete.no
- 공지사항 삭제의 경우에는 request를 보내는 게 아니라 sql에서 update만 하면 된다.
@WebServlet("/delete.no")
public class NoticeDeleteController extends HttpServlet {
private static final long serialVersionUID = 1L;
public NoticeDeleteController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int noticeNo = Integer.parseInt(request.getParameter("nno"));
int result = new NoticeService().deleteNotice(noticeNo);
if(result > 0) {
request.getSession().setAttribute("alertMsg", "공지사항이 삭제되었습니다.");
response.sendRedirect(request.getContextPath()+"/list.no");
} else {
request.setAttribute("errorMsg", "공지사항 삭제에 실패하였습니다.");
request.getRequestDispatcher("views/common/errorPage.jsp").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
NoticeService
- 공지글 가져오기
public Notice selectNotice(int noticeNo) {
Connection conn = getConnection();
Notice n = new NoticeDao().selectNotice(conn, noticeNo);
close(conn);
return n;
}
- 공지글 수정하기
public int updateNotice(Notice n) {
Connection conn = getConnection();
int result = new NoticeDao().updateNotice(conn, n);
if(result > 0) {
commit(conn);
} else {
rollback(conn);
}
close(conn);
return result;
}
- 공지글 삭제하기
public int deleteNotice(int noticeNo) {
Connection conn = getConnection();
int result = new NoticeDao().deleteNotice(conn, noticeNo);
if(result > 0) {
commit(conn);
} else {
rollback(conn);
}
close(conn);
return result;
}
NoticeDao
- 공지글 가져오기
public Notice selectNotice(Connection conn, int noticeNo) {
// select문으로 noticeNo에 해당하는 글 1개 또는 0개 조회
Notice n = null;
ResultSet rset = null;
PreparedStatement pstmt = null;
String sql = prop.getProperty("selectNotice");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, noticeNo);
rset = pstmt.executeQuery();
if(rset.next()) {
n = new Notice(rset.getInt("NOTICE_NO")
, rset.getString("NOTICE_TITLE")
, rset.getString("NOTICE_CONTENT")
, rset.getString("USER_ID")
, rset.getDate("CREATE_DATE"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rset);
close(pstmt);
}
return n;
}
- 공지글 수정하기
public int updateNotice(Connection conn, Notice n) {
int result = 0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("updateNotice");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, n.getNoticeTitle());
pstmt.setString(2, n.getNoticeContent());
pstmt.setInt(3, n.getNoticeNo());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(pstmt);
}
return result;
}
- 공지글 삭제하기
public int deleteNotice(Connection conn, int noticeNo) {
int result = 0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("deleteNotice");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, noticeNo);
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(pstmt);
}
return result;
}
notice-mapper.xml
- 공지글 가져오기
<entry key="selectNotice">
SELECT NOTICE_NO
, NOTICE_TITLE
, NOTICE_CONTENT
, USER_ID
, CREATE_DATE
FROM NOTICE N
JOIN MEMBER ON (NOTICE_WRITER = USER_NO)
WHERE NOTICE_NO = ?
AND N.STATUS = 'Y'
</entry>
- 공지글 수정하기
<entry key="updateNotice">
UPDATE NOTICE
SET NOTICE_TITLE = ?
, NOTICE_CONTENT = ?
WHERE NOTICE_NO = ?
AND STATUS = 'Y'
</entry>
- 공지글 삭제하기
<entry key="deleteNotice">
UPDATE NOTICE
SET STATUS = 'N'
WHERE NOTICE_NO = ?
</entry>
반응형