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)
댓글 남기기