Programming Language/Javascript, ...

웹페이지 만들기(5) - 공지사항 수정 및 삭제

Ma_Sand 2022. 5. 9. 18:18
반응형

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>

 

 

반응형