ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring - JSTL
    Java/Spring 2018. 8. 22. 17:49
    반응형

    JSP의 EL과 함께 사용 된다.


    반복 / 조건 / 데이터 포맷의 기능을 구현 해놓은 라이브러리다.


    jstl, standard의 Dependency를 추가한다.


    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>




    // JSTL에서 사용 가능한 코어 라이브러리
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 조건/제어/반복 등의 기능을 제공 -->


    실습예제



    applicationContext.xml에서 사용할 Query를 value Tag에 만든다.


    <!-- BoardDaoImpl이 사용할 Query 작성 -->
        <bean id="boardQueries"
         class="java.util.ArrayList">
         <constructor-arg name="c">
           <list>
               <!-- 0번 Index, Insert -->
               <value>
                        INSERT INTO SPRING.BOARD (
                                         ID
                                         , SUBJECT
                                         , CONTENT
                                         , EMAIL
                                         , CRT_DT
                                         , MDFY_DT
                                         , FILE_NAME
                                         , ORIGIN_FILE_NAME
                                         )
                        VALUES (
                                     BOARD_ID_SEQ.NEXTVAL
                                         , ?
                                         , ?
                                         , ?
                                         , SYSDATE
                                         , SYSDATE
                                         , ?
                                         , ?
                         )
               </value>
               <!-- 1번 Index, Select -->
               <value>
                   SELECT  ID
                                , SUBJECT
                                , CONTENT
                                , EMAIL
                                , CRT_DT
                                , MDFY_DT
                                , FILE_NAME
                                , ORIGIN_FILE_NAME
                        FROM    BOARD
                        WHERE   ID = ?
               </value>
               <!-- 2번 Index, Delete -->
               <value>
                   DELETE
                   FROM    BOARD
                   WHERE   ID = ?
               </value>
               <!-- 3번 Index, Select -->
               <value>
                   SELECT  ID
                                , SUBJECT
                                , CONTENT
                                , EMAIL
                                , CRT_DT
                                , MDFY_DT
                                , FILE_NAME
                                , ORIGIN_FILE_NAME
                        FROM    BOARD
                        ORDER   BY ID DESC
               </value>
           </list>
         </constructor-arg>
        </bean>


    Dao Interface에도 List<ObjectVO>를 반환하는 selectAllObj() Method를 만든다



    BoardDaoImpl에서는 RowMapper로 쿼리문의 데이터를 가져 온다.


    @Override
        public List<MemberVO> selectAllMembers() {
            return this.jdbcTemplate.query(
                        this.memberQueries.get(Query.SELECT_ALL_QUERY)
                        , new RowMapper<MemberVO> () {
                            @Override
                            public MemberVO mapRow(ResultSet rs, int rowNum) throws SQLException {
                                return BindData.bindData(rs, new MemberVO());
                            }
                        });
        }


    Service Interface에서도 List<OjectVO>식의 메소드를 만들어주고,


    ServiceImpl에서는 objDao.DaoInterface에서 구현한 메소드를 추가한다.


    @Override
        public List<MemberVO> readAllMember() {
            return memberDao.selectAllMembers();
        }



    Controller에서 List<ObjectVO>를 만들고 view에 추가하는 ModelAndView식의 메소드를 만든다.


    // http://localhost:8080/ProjectName/board/detail/1
    @RequestMapping("/board/detail/{id}")
    public ModelAndView viewBoardDetailPage( @PathVariable int id ) {
        BoardVO boardVO = this.boardService.readOneBoard(id);
        
        ModelAndView view = new ModelAndView("board/detail");
        view.addObject("boardVO", boardVO);
        return view;
    }



    Controller까지 만든 후, Data가 있는 List를 보여줄  jsp파일을 만들고 


    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    JSTL Core Lib를 추가한다.


    List를 JSTL로 보여줄땐,


    <c:choose>
        <c:when test="${not empty boardVOList}"> <!-- 비어 있지않을때 동작 -->
            <c:forEach items="${boardVOList}" var="board">
                <div class="contentWrapper">
                    <div class="number box">${board.id}</div> <!--
                        --><div class="subject box">
                            <a href="/HelloSpring/board/detail/${board.id}">
                                ${board.subject}
                            </a>
                        </div> <!--
                        --><div class="writer box">${board.email}</div> <!--
                        --><div class="create-date box">${board.crtDt}</div>
                </div>
            </c:forEach>
        </c:when>
        <c:otherwise> <!-- 비어 있을 때 -->
            <div id="no-articles">
                등록된 게시물이 없습니다.
            </div>
        </c:otherwise>
    </c:choose>


    *choose ~ when ~ otherwise 식으로 사용 가능하다.


    if ~ else if ~ else와 같은 기능이다.


    !은 not으로 풀어쓰고 when조건에는 test=""에 확인할 값을 넣는다.


    *List를 출력할 때, PK로 된 데이터로 ORDER BY하면 다른 데이터를 정렬한것보다 빠르다.


    *Method나 변수 Class등 이름을 바꿀 때, 해당 데이터에서 Alt + Shift + R을 사용해서 변경 후 Enter를 입력하면 Eclipse가 연결되있는 같은 이름 모두 변경 된 이름으로 자동으로 변경해준다.



    반응형

    댓글

Designed by Tistory.