기능구현

  • 회원가입(주소API연동, 이메일 인증, ajax를 사용하여 아이디 중복검사)
  • 관리자 페이지(인터셉터 적용, 상품관리, 회원관리)
  • 업로드(이미지 등록, 수정, 삭제)
  • 검색
  • 페이징
  • 구매(장바구니, 포인트사용)
  • 댓글(등록,수정,삭제)
  • 중간에 막혔거나 에러 해결 못하겠으면 ybnr92@gmail.com 으로 문의


목표

  • 작가 목록 페이지 출력


순서

  • Service 작업
  • Controller 작업
  • AuthorVO 수정
  • View 작업
  • 페이지 이동 테스트


Service 작업

  • 지난 포스팅에서 작성한 Mapper 메서드를 호출하는 Service 단계의 메서드를 작성한다. AuthorService.java인터페이스에 아래의 메서드를 선언한다.


	/* 작가 목록 */
	public List<AuthorVO> authorGetList(Criteria cri) throws Exception;


  • Servicec 인터페이스에서 선언한 메서드를 오버라이딩 하여 구현한다. 해당 메서드는 Mapper의 AuthorGetList()메서드를 호출하고 List를 반환받아야 하기 때문에 return에 Mapper의 메서드를 호출한다.
  • 구현부에는 해당 메서드가 사용되는 것을 확인할 수 있도록 콘솔에 메시지를 출력하는 log.info()메서드를 작성하였다.
  • log.info() 메서드를 사용하기 위해 클래스 상단에 아래의 변수를 선언 및 초기화 하였다.
    • Lombok을 사용한다면 @log4j 어노테이션을 선언하면 된다.


package com.store.service;


import java.util.List;

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.store.mapper.AuthorMapper;
import com.store.model.AuthorVO;
import com.store.model.Criteria;

@Service
public class AuthorServiceImpl implements AuthorService{
	
	private static final Logger log = LoggerFactory.getLogger(AuthorServiceImpl.class);
	
	@Autowired
	AuthorMapper authorMapper;
	
	/* 작가 등록 */
	@Override
	public void authorEnroll(AuthorVO author) throws Exception {
		
		authorMapper.authorEnroll(author);
	}
	
	/* 작가 목록 */
	@Override
	public List<AuthorVO> authorGetList(Criteria cri) throws Exception {
		
		log.info("(service)authorGetList()......." + cri);
		
		return authorMapper.authorGetList(cri);
	}

}


Controller 작업

  • 작가 관리 페이지(authorManage.jsp)에서 작가 목록을 출력할 수 있도록 서버에서 작가 목록 데이터를 넘겨주는 작업을 해야한다.
  • authorManage url 매핑 메서드인 authorManageGET()에 파라미터로 Criteria, Model 클래스를 부여한다.
  • Criteria는 사용자가 요청하는 몇 페이지, 몇 개의 작가 정보를 출력을 원하는지에 대한 데이터를 전달받기 위한 수단이다. 전달받은 Criteria데이터를 활용하여 작가 목록 데이터를 반환하는 쿼리를 실행하게 된다.
  • Model은 쿼리의 실행 결과 받환받은 작가 목록 데이터를 authorManage.jsp에 넘겨주기 위해 파라미터로 부여했다.


  • AdminController.java
	/* 작가 관리 페이지 접속 */
	@RequestMapping(value = "authorManage", method = RequestMethod.GET)
	public void anthorManageGET(Criteria cri, Model model) throws Exception {
		logger.info(">>>>>>>>>> 작가 관리 페이지 접속");
	}


  • 구현부는 AuthorServiceauthorGetList()메서드를 호출하여 반환받은 결과를 list 속성명에 저장하여 전달해주는 코드를 작성한다.
	/* 작가 관리 페이지 접속 */
	@RequestMapping(value = "authorManage", method = RequestMethod.GET)
	public void anthorManageGET(Criteria cri, Model model) throws Exception {
		logger.info(">>>>>>>>>> 작가 관리 페이지 접속");
		
		/* 작가 목록 출력 데이터 */
		List list = authorService.authorGetList(cri);
		
		model.addAttribute("list", list);
	}


AuthorVO 수정

  • 쿼리 반환 결과 데이터에는 AuthorVO에 정의되어 있는 소속 국가 이름(nationName)은 반환되지 않는다. 반환받도록 쿼리문을 작성할 수 있지만 다른 표에서 데이터를 가져와야 하기 때문에 자원을 좀 더 많이 소모하게 된다.
  • 이러한 소모를 줄이기 위해서 쿼리 문의 반환받은 결과 데이터 중 nationId를 전달받을 때 nationName의 값이 초기화될 수 있도록 AuthorVO 클래스 코드를 수정해줄 것이다.
    • 처리해야 할 데이터가 01(국내), 02(국외)밖에 없기 때문에 Java쪽에서 처리해주도록 한다.
  • setNationId() 메서드의 구현부에 아래의 코드를 추가한다.
	public void setNationId(String nationId) {
		this.nationId = nationId;
		
		if (nationId.equals("01")) {
			
			this.nationName = "국내";
		} else {
			
			this.nationName = "국외";
		}
	}


View 작업

  • JSTL c, JSTL fmt를 사용할 것이기 때문에 페이지 상단에 태그 라이브러리를 추가해준다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>


  • 전달받은 작가 목록 데이터를 활용하여 게시판 표의 형태로 출력시키려고 한다.
  • class 속성명이 admin_content_subject인 div태그 다음 순서에 아래의 코드를 추가해준다.


<div class="author_table_wrap">
                    	<table class="author_table">
                    		<thead>
                    			<tr>
                    				<td class="th_column_1">작가 번호</td>
                    				<td class="th_column_2">작가 이름</td>
                    				<td class="th_column_3">작가 국가</td>
                    				<td class="th_column_4">등록 날짜</td>
                    				<td class="th_column_5">수정 날짜</td>
                    			</tr>
                    		</thead>
                    		<c:forEach items="${list}" var="list">
                    		<tr>
                    			<td><c:out value="${list.authorId}"></c:out> </td>
                    			<td><c:out value="${list.authorName}"></c:out></td>
                    			<td><c:out value="${list.nationName}"></c:out> </td>
                    			<td><fmt:formatDate value="${list.regDate}" pattern="yyyy-MM-dd"/></td>
                    			<td><fmt:formatDate value="${list.updateDate}" pattern="yyyy-MM-dd"/></td>
                    		</tr>
                    		</c:forEach>
                    	</table>                			
                    </div>                    
                </div>


  • 서버로부터 전달받은 list에 담긴 데이터들을 collection 데이터를 반복해서 처리해주는 <c:foreach> 태그를 활용하여 출력시켰다.
  • 날짜는 원하는 형식을 출력시키기 위해 <fmt:formDate>태그를 활용하였다.



	/* 작가 목록 영역 */
.author_table_wrap{
	padding: 20px 35px
}
.author_table{
	width: 100%;
    border: 1px solid #d3d8e1;
    text-align: center;
    border-collapse: collapse;
}
.author_table td{
	padding: 10px 5px;
	border : 1px solid #e9ebf0;
}
.author_table thead{
	background-color: #f8f9fd;	
	font-weight: 600;
}
.th_column_1{
	width:120px;
}
.th_column_3{
	width:110px;
}
.th_column_4{
	width:140px;
}
.th_column_5{
	width:140px;
}



페이지 이동 테스트

  • 아직 페이지네이션을 추가하지 않았기 때문에 마우스로 이동이 불가하다.
  • url의 쿼리스트링을 통해 페이지 이동이 정상적으로 되는지 테스트 한다.


  • ex ) http://localhost:8081/admin/authorManage?pageNum=3&amount=10


  • ex ) http://localhost:8081/admin/authorManage?pageNum=1&amount=10

Leave a comment