DTO
QnaVO
package net.macaronics.web.dto; import java.sql.Timestamp; public class QnaVO { private int qseq; //글번호 private String subject; //제목 private String content; //문의 내용 private String reply; //답변 내용 private String id; //작성자 아이디 private String rep; //답변 유무 private Timestamp indate; //작성일
DAO
AdminQnaDAO
package net.macaronics.web.admin.controller.dao; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import config.MybatisService; import net.macaronics.web.dto.QnaVO; public class AdminQnaDAO { private static final Logger logger =LogManager.getLogger(AdminQnaDAO.class); private SqlSession sqlSession; private static AdminQnaDAO instance; private AdminQnaDAO(){ } public static AdminQnaDAO getInstance(){ if(instance==null){ instance=new AdminQnaDAO(); } return instance; } // 관리자 qna 목록 출력 public List<QnaVO> listAllQna(){ List<QnaVO> list=new ArrayList<>(); try{ sqlSession=MybatisService.getFactory().openSession(); list=sqlSession.selectList("qna.listAllQna"); }catch(Exception e){ e.printStackTrace(); }finally{ MybatisService.sessionClose(sqlSession); } return list; } //qna update public void updateQna(QnaVO qnaVO){ try{ sqlSession=MybatisService.getFactory().openSession(); sqlSession.update("qna.updateQna", qnaVO); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.commit(); MybatisService.sessionClose(sqlSession); } } }
mapper
<update id="updateOrderResult"> update TBL_ORDER_DETAIL set result='2' where odseq=#{odseq} </update>
목록 보기
AdminQnaListAction
package net.macaronics.web.admin.controller; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.macaronics.web.admin.controller.dao.AdminQnaDAO; import net.macaronics.web.controll.action.Action; import net.macaronics.web.dao.QnaDAO; import net.macaronics.web.dto.QnaVO; public class AdminQnaListAction implements Action { @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url="admin/qna/qnaList.jsp"; AdminQnaDAO qnaDAO =AdminQnaDAO.getInstance(); List<QnaVO> qnaList =qnaDAO.listAllQna(); request.setAttribute("qnaList", qnaList); request.getRequestDispatcher(url).forward(request, response); } }
qnaList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE html> <html class="no-js"> <head> <jsp:include page="../../include/AdminHeader.jsp" /> </head> <body> <jsp:include page="../../include/AdminTopFixMenu.jsp" /> <div class="container-fluid"> <div class="row-fluid"> <div class="span3" id="sidebar"> <jsp:include page="../../include/AdminLeftMenu.jsp" /> </div> <!--/span--> <div class="span9" id="content"> <div class="row-fluid"> <div class="alert alert-success"> <button type="button" class="close" data-dismiss="alert">×</button> <h4>답변 리스트</h4> </div> </div> <div> <form method="post" action="" name="frm"> <div class="table-responsive"> <table class="table"> <tr class="success"> <th>번호(답변여부)</th> <th>제목</th> <th>작성자</th> <th>작성일</th> </tr> <c:if test="${empty qnaList or qnaList.size()==0 }" > <tr> <td colspan="6" class="text-center"> 작성된 글이 없습니다.</td> </tr> </c:if> <c:forEach items="${qnaList}" var="qna"> <tr> <td> ${qna.qseq } <c:choose> <c:when test="${qna.rep=='1' }"> <span style="color:red;">(미처리)</span> </c:when> <c:otherwise> <span>(답변처리완료)</span> </c:otherwise> </c:choose> </td> <td><a href="MacaronicsServlet?command=admin_qna_detail&qseq=${qna.qseq}" >${qna.subject }</a></td> <td>${qna.id }</td> <td><fmt:formatDate type="date" value="${qna.indate }" /></td> </tr> </c:forEach> </table> </div> </form> </div> </div> </div> </div> <hr> <jsp:include page="../../include/AdminFooter.jsp" />
QnA 답변 상세보기 및 답변하기
AdminQnaDetailAction
package net.macaronics.web.admin.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.macaronics.web.controll.action.Action; import net.macaronics.web.dao.QnaDAO; import net.macaronics.web.dto.QnaVO; public class AdminQnaDetailAction implements Action{ @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url="admin/qna/qnaDetail.jsp"; String qseq=request.getParameter("qseq").trim(); QnaDAO qnaDAO =QnaDAO.getInstance(); QnaVO qnaVO =qnaDAO.getQna(Integer.parseInt(qseq)); String str =qnaVO.getContent(); String content=str.replaceAll("<", "<").replaceAll(">", ">"); qnaVO.setContent(content); request.setAttribute("qnaVO", qnaVO); request.getRequestDispatcher(url).forward(request, response); } }
qnaDetail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE html> <html class="no-js"> <head> <jsp:include page="../../include/AdminHeader.jsp" /> <!-- Bootstrap --> <link rel="stylesheet" type="text/css" href="../../Bootstrap-Admin/vendors/bootstrap-wysihtml5/src/bootstrap-wysihtml5.css"></link> </head> <body> <jsp:include page="../../include/AdminTopFixMenu.jsp" /> <div class="container-fluid"> <div class="row-fluid"> <div class="span3" id="sidebar"> <jsp:include page="../../include/AdminLeftMenu.jsp" /> </div> <!--/span--> <div class="span9" id="content"> <div class="row-fluid"> <div class="alert alert-success"> <button type="button" class="close" data-dismiss="alert">×</button> <h4>Q & A 게시판</h4> </div> </div> <div> <div class="table-responsive"> <table class="table"> <tr> <th>제목</th> <td>${qnaVO.subject } ${qnaVO.rep }</td> </tr> <tr> <th>등록일</th> <td><fmt:formatDate value="${qnaVO.indate }" type="date" /></td> </tr> <tr> <th>내용</th> <td> ${qnaVO.content } </td> </tr> <c:choose> <c:when test="${qnaVO.rep=='1' }"> <form action="/MacaronicsServlet?command=admin_qna_repsave" method="post" > <table class="table"> <tr> <th>답변하기</th> <td> <textarea id="bootstrap-editor" style="width:98%;height:200px;" name="reply" ></textarea> </td> </tr> <tr> <td></td> <td> <input type="hidden" value="${qnaVO.qseq}" name="qseq"> <input type="submit" value="답변달기" class="btn btn-success"></td> </tr> </table> </form> </c:when> <c:otherwise> <table class="table"> <tr> <th>답변 내용</th> <td>${qnaVO.reply }</td> </tr> </table> </c:otherwise> </c:choose> <tfoot> <tr> <td colspan="2" class="text-center" style="text-align: center;"> <a href="MacaronicsServlet?command=admin_qna_list" class="btn btn-primary">목록</a> </td> </tr> </tfoot> </table> </div> </div> </div> </div> </div> <hr> <div style="margin-bottom: 150px;"> </div> <!-- FOOTER --> <nav class="avbar navbar-inverse navbar-fixed-bottom" style="height:50px ; background-color:#000 ;"> <div class="container text-center" style="color:#fff;"> <p> </p> <p ><a href="http://macaronics.net/" style=" color:#fff;">Macaronics.net</a></p> <p> </p><p> </p> </div> </nav> <!--/.fluid-container--> <script src="../../Bootstrap-Admin/vendors/bootstrap-wysihtml5/lib/js/wysihtml5-0.3.0.js"></script> <script src="../../Bootstrap-Admin/vendors/jquery-1.9.1.min.js"></script> <script src="../../Bootstrap-Admin/bootstrap/js/bootstrap.min.js"></script> <script src="../../Bootstrap-Admin/vendors/bootstrap-wysihtml5/src/bootstrap-wysihtml5.js"></script> <script src="../../Bootstrap-Admin/vendors/bootstrap-wysihtml5/src/bootstrap-wysihtml5.js"></script> <script type="text/javascript"> $(function() { // Bootstrap $('#bootstrap-editor').wysihtml5(); }); </script> </body> </html>
AdminQnaResaveAction
package net.macaronics.web.admin.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.macaronics.web.admin.controller.dao.AdminQnaDAO; import net.macaronics.web.controll.action.Action; import net.macaronics.web.dto.QnaVO; public class AdminQnaResaveAction implements Action { @Override public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url="MacaronicsServlet?command=admin_qna_list"; String qseq=request.getParameter("qseq").trim(); String reply=request.getParameter("reply"); QnaVO qnaVO=new QnaVO(); qnaVO.setQseq(Integer.parseInt(qseq)); qnaVO.setReply(reply); AdminQnaDAO dao =AdminQnaDAO.getInstance(); dao.updateQna(qnaVO); response.sendRedirect(url); } }
제작 : macaronics.net - Developer Jun Ho Choi
소스 : https://github.com/braverokmc79/jsp_sin
${request.getContextPath() } 처리를 안한 부분이 있으므로
루트 설정( http://macaronics.net/index.php/m01/jsp/view/1352) 및 server.xml 에서 DB 컨넥션 설정은 필수 설정이다.
댓글 ( 8)
댓글 남기기