본문 바로가기
Side Project/spring 기반으로 웹 게시판 개발하기

Spring 공지사항 게시판 만들기 - (2) 공지사항 보기(View)

by 잇서니 2021. 1. 12.
반응형

 

혼자 이해한 내용이니 혹시 잘못된 부분이 있을시 댓글 남겨주시면 감사하겠습니다 :)

 

 

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에서 보기 버튼을 눌렀을 때 파라미터로 넘어온 값입니다.

 

 

 

 

반응형

댓글