혼자 이해한 내용이니 혹시 잘못된 부분이 있을시 댓글 남겨주시면 감사하겠습니다 :)
Controller 구현
공지사항 등록 기능은 이 글을 참고해주세요
Controller 코드 (src/main/java/net/admins/controller/BoardNoticeAdminsController.java)
@Controller
public class BoardNoticeAdminsController {
@Resource(name = "boardNoticeAdminsService")
private BoardNoticeAdminsService BoardNoticeAdminsService;
// Promoter 공지사항 View
@RequestMapping(value = "/admins/promoter/boardmgr/PmtNoticeView.mwav")
public ModelAndView selectOnePmtNtmView(CommandMap commandMap,
HttpServletRequest request, HttpSession session) throws Exception {
//mv 생성
ModelAndView mv = new ModelAndView("/Admins/Promoter/BoardMgr/PmtNoticeView");
// 공지사항 내용 select하는 service 호출
Map<String, Object> selectOnePmtNtmView = BoardNoticeAdminsService
.selectOnePmtNtmView(commandMap.getMap());
if (selectOnePmtNtmView != null && !selectOnePmtNtmView.isEmpty()) {
// mv에 string값 넣기
String mm = "site";
mv.addObject("mm", mm);
// mv에 select 결과 넣기
mv.addObject("selectOnePmtNtmView", selectOnePmtNtmView);
}
// view에 결과 넘김
return mv;
}
}
1) RequestMapping
사용자는 URL로 요청을 합니다. RequestMapping 에 따라 해당 요청 URL을 어떤 함수에서 처리할 지 결정합니다.
사용자가 보기 버튼을 누르면 /admins/promoter/boardmgr/PmtNoticeView.mwav 을 요청하게 됩니다. 그러면 RequestMapping에 해당 경로가 적힌 selectOnePmtNtmView() 함수가 실행되는 구조인 것입니다. 이 때 파라미터를 같이 넘길 수 있습니다.
src/main/webapp/Admins/Promoter/BoardMgr/PmtNoticeLists.jsp 의 일부
<button type="button" class="btn btn"
onclick="javascript:window.location.href='/admins/promoter/boardmgr/PmtNoticeView.mwav?boardPromoter_id=${RselectListPmtNtmList.boardPromoter_id}'">보기</button>
2) ModelAndView
View에 데이터를 보낼 때 사용하는 객체입니다. 데이터와 View 페이지를 둘 다 설정할 수 있습니다.
공지사항 내용을 select하여 view에 전달하면 아래와 같은 화면이 나옵니다.
컨트롤러에서 mv에 selectOnePmtNtmView 이름으로 데이터를 추가하였습니다. mv.addObject("selectOnePmtNtmView", selectOnePmtNtmView);
이 데이터를 jsp에서 가져와 사용할 수 있습니다. ${selectOnePmtNtmView.boardPromoter_id} 이러한 형식으로 사용합니다.
location.href를 사용하여 다른 컨트롤러를 호출할 수 있습니다. (src/main/java/net/admins/controller/PmtNoticeStatusUpdate.mwav) 이 때, boardPromoter_id와 bpStatus 변수를 같이 넘길 수 있습니다.
src/main/webapp/Admins/Promoter/BoardMgr/PmtNoticeView.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="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<!-- /////////// -->
<jsp:include page="/PartsOfContent/Head_Import.jsp" flush="false" />
<!-- /////////// -->
</head>
<body>
<!-- //////////////////////////////////// -->
<jsp:include page="/Admins/AdminsHeader.jsp" flush="false" />
<!-- //////////////////////////////////// -->
<!-- Page Content -->
<div class="container">
<!-- Page Heading/Breadcrumbs -->
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">
Admins <small> PromoterNoticeView</small>
</h1>
<ol class="breadcrumb">
<li><a href="index.html">Home</a></li>
<li>Admins</li>
<li>Promoter</li>
<li>BoardMgr</li>
<li class="active">PmtNoticeView</li>
</ol>
</div>
</div>
<!-- /.row -->
<!-- Content Row -->
<div class="row">
<div class="col-md-3">
<c:choose>
<c:when test="${param.mm eq null}">
<c:set value="${mm}" var="mm" />
</c:when>
<c:otherwise>
<c:set value="${param.mm}" var="mm" />
</c:otherwise>
</c:choose>
<jsp:include page="/admins/LeftMenu.mwav" flush="false">
<jsp:param name="mm" value="${mm}" />
</jsp:include>
</div>
<div class="col-md-9">
<!-- 소제목 -->
<div class="col-lg-12">
<h2 class="page-header">PmtNoticeView</h2>
</div>
<!-- ----- -->
<!-- Content Column -->
<div class="col-lg-12">
<div class="row">
<%--================================================시작========================================================== --%>
<script>
function check(msg) {
// msg : 비노출 / 공지게시
// bpStatus : 1(비노출) / 2(공지게시)
if (confirm("정말 " + msg + " 하시겠습니까?") == true){ //확인
alert(msg + " 되었습니다.");
var bpStatus = {'비노출':1, '공지게시':2};
location.href = "/admins/promoter/boardmgr/PmtNoticeStatusUpdate.mwav?boardPromoter_id=${selectOnePmtNtmView.boardPromoter_id}&&bpStatus="+bpStatus[msg];
return true;
}
}
</script>
<!-- Content Column -->
<div class="table-responsive">
<form role="form">
<table class="table table-striped">
<thead>
<tr>
<div class="pull-right">
<c:set var ="bpStatus" value="${selectOnePmtNtmView.bpStatus}"/>
<c:if test="${fn:contains(bpStatus, 1)}">
<span class="label label-default">
<strong>비노출</strong>
</span>
</c:if>
<c:if test="${fn:contains(bpStatus, 2)}">
<span class="label label-primary">
<strong>공지게시</strong>
</span>
</c:if>
</div>
</tr>
<tr class="active">
<th>NO.</th>
<th>Group</th>
<th>ViewCount</th>
<th>InsertDt</th>
<th>staff_id</th>
<th>Order</th>
</tr>
</thead>
<tbody>
<tr>
<td>${selectOnePmtNtmView.boardPromoter_id}</td>
<td>${selectOnePmtNtmView.bpGroup}</td>
<td>${selectOnePmtNtmView.bpViewCount}</td>
<td>${selectOnePmtNtmView.bpInsertDt}</td>
<td>${selectOnePmtNtmView.staff_id}</td>
<td>${selectOnePmtNtmView.bpOrder}</td>
</tr>
</tbody>
</table>
<table class="table table-striped">
<tr>
<th class="active">Title</th>
</tr>
<tr>
<td>${selectOnePmtNtmView.bpTitle}</td>
</tr>
<tr>
<th class="active">SubTitle</th>
</tr>
<tr>
<td>${selectOnePmtNtmView.bpSubTitle}</td>
</tr>
<tr>
<th class="active">Reference</th>
</tr>
<tr>
<td>${selectOnePmtNtmView.bpRelatedLink}</td>
</tr>
<tr>
<th class="active">Image Link</th>
</tr>
<tr>
<td>${selectOnePmtNtmView.bpTitleImageLink}</td>
</tr>
<tr>
<th class="active">Keywords</th>
</tr>
<tr>
<td>${selectOnePmtNtmView.bpKeyword}</td>
</tr>
<tr>
<th class="active">Content</th>
</tr>
<tr>
<td>${selectOnePmtNtmView.bpContent}</td>
</tr>
</table>
</form>
<br style="clear: both">
<p class="pull-right">
<button type="button" class="btn btn"
onClick="javascript:window.location.href='/admins/promoter/boardmgr/PmtNoticeList.mwav'">All List</button>
<button type="button" class="btn btn-success"
onclick="check('비노출')">비노출</button>
<button type="button" class="btn btn-success"
onclick="check('공지게시')">공지게시</button>
</p>
</div>
<%--================================================끝========================================================== --%>
</div>
</div>
</div>
</div>
</div>
<!-- /.container -->
<!-- Footer -->
<footer>
<!--/////////////////////////////////////////////////// -->
<jsp:include page="/Admins/AdminsFooter.jsp" flush="false" />
<!--/////////////////////////////////////////////////// -->
</footer>
</body>
</html>
참고용으로 Service 및 DAO 코드도 남겨두겠습니다.
Service 코드 (src/main/java/net/admins/controller/BoardNoticeAdminsServiceImpl.java)
@Service("boardNoticeAdminsService")
public class BoardNoticeAdminsServiceImpl implements BoardNoticeAdminsService {
@Resource(name = "boardNoticeAdminsDAO")
@Autowired(required = true)
private BoardNoticeAdminsDAO boardNoticeAdminsDAO;
@Override
public Map<String, Object> selectOnePmtNtmView(Map<String, Object> map)
throws Exception {
// TODO Auto-generated method stub
boardNoticeAdminsDAO.updatePmtNtmHitCnt(map);
Map<String, Object> resultMap = boardNoticeAdminsDAO.selectOnePmtNtmView(map);
int bpStatus = (int) resultMap.get("bpStatus");
resultMap.put("bpStatus", bpStatus);
return resultMap;
}
}
공지사항 등록은 리턴값이 없었지만 공지사항 보기는 Map 객체(공지사항을 select한 결과)를 반환합니다.
Map 객체는 DAO의 selectOnePmtNtmView()를 호출한 결과값입니다.
DAO 코드 (src/main/java/net/admins/dao/BoardNoticeAdminsDAO.java)
@Repository("boardNoticeAdminsDAO")
public class BoardNoticeAdminsDAO extends AbstractDAO {
@SuppressWarnings("unchecked")
public Map<String, Object> selectOnePmtNtmView(Map<String, Object> map) {
// TODO Auto-generated method stub
return (Map<String, Object>) selectOne(
"boardNoticeAdminsDAO.selectOnePmtNtmView", map);
}
}
MyBatis의 selectOne 함수를 호출합니다.
mapper (src/main/resources/mapper/board/admins/BoardNoticeAdmins_SQL.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="boardNoticeAdminsDAO">
<select id="selectOnePmtNtmView" parameterType="hashmap" resultType="hashmap">
<![CDATA[
select * from BoardPromoter_tbl where boardPromoter_id = #{boardPromoter_id}
]]>
</select>
</mapper>
mapper에서 어떤 select 쿼리를 사용할 지 적어줍니다. #{boardPromoter_id} 변수는 src/main/webapp/Admins/Promoter/BoardMgr/PmtNoticeLists.jsp에서 보기 버튼을 눌렀을 때 파라미터로 넘어온 값입니다.
'Side Project > spring 기반으로 웹 게시판 개발하기' 카테고리의 다른 글
Spring 공지사항 게시판 만들기 - (3) 공지사항 목록 (List) (8) | 2021.01.12 |
---|---|
Spring 공지사항 게시판 만들기 - (1) 공지사항 등록하기 (6) | 2020.12.30 |
Spring MVC 디렉토리 구조 및 실행순서 (controller, service, dao, view ) (11) | 2020.12.30 |
댓글