스프링으로 쇼핑몰을 만들어보자20 - 작가목록 기능 구현 2
기능구현
- 회원가입(주소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
어노테이션을 선언하면 된다.
- Lombok을 사용한다면
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(">>>>>>>>>> 작가 관리 페이지 접속");
}
- 구현부는
AuthorService
의authorGetList()
메서드를 호출하여 반환받은 결과를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