item_reg.html 작성
<!DOCTYPE html>
<html lang="en" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
<title>상품 등록 페이지</title>
<div th:replace="/fragments/header.html :: header"></div>
</head>
<body>
<div th:replace="/fragments/nav.html :: nav"></div>
<div class="container">
<h1>상품 등록</h1>
<form th:action="@{/item/item_reg}" method="post">
<div class="mb-3">
<label for="name" class="form-label">상품명</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="mb-3">
<label for="price" class="form-label">가격</label>
<input type="number" class="form-control" id="price" name="price" required>
</div>
<div class="mb-3">
<label for="count" class="form-label">재고</label>
<input type="number" class="form-control" id="count" name="count" required>
</div>
<div class="mb-3">
<label for="content" class="form-label">상품 설명</label>
<textarea class="form-control" id="content" name="content" required></textarea>
</div>
<button type="submit" class="btn btn-primary">상품 등록</button>
</form>
</div>
</body>
</html>
ItemDto 작성
@Data
public class ItemDto {
private String name;
private String content;
private int price;
private int count;
private Member member;
public Item toEntity(){
return Item.builder()
.name(name)
.content(content)
.price(price)
.count(count)
.member(member)
.build();
}
}
ItemController 추가
@Controller
@RequestMapping("/item")
@RequiredArgsConstructor
public class ItemController {
private final ItemService itemService;
/**
* 상품등록 페이지
*/
@GetMapping("/item_reg")
public String item_reg(){
return "item/item_reg";
}
@PostMapping("/item_reg")
public String item_reg(@ModelAttribute ItemDto itemDto, Principal principal){
itemService.item_reg(itemDto, principal.getName());
return "redirect:/";
}
}
/item/item_reg 경로로 GET요청시 item_reg.html 리턴
/item/item_reg 경로로 POST요청시
@ModelAttribute 어노테이션을 이용하여 item_reg.html의 form의 value를
ItemDto와 매핑하고
Principal객체로 현재 사용자 정보를 service로넘겨준뒤
"/" 경로로 redirect한다.
ItemService 추가
ItemService
public interface ItemService {
List<Item> itemList();
void item_reg(ItemDto itemDto, String email); // 추가
}
ItemServiceImpl 추가
@Service
@RequiredArgsConstructor
public class ItemServiceImpl implements ItemService {
private final ItemRepository itemRepository;
private final MemberRepository memberRepository;
public List<Item> itemList(){
return itemRepository.findAll();
}
// 추가
public void item_reg(ItemDto itemDto, String email){
Member member = memberRepository.findByEmail(email);
itemDto.setMember(member);
itemRepository.save(itemDto.toEntity());
}
}
controller에서 넘겨준 itemDto와 현재사용자이름으로
MemberRepository에서 조회한 후 itemDto에 member로 추가
toEntity메서드로 변환하여 DB에 save한다.
index.html 추가
<div sec:authorize="hasAuthority('SELLER')">
<a class="btn btn-primary" href="/item/item_reg">상품 등록</a>
</div>
테이블 하단에 상품등록 버튼을 추가해주었다.
sec:authorize="hasAuthority('SELLER')" : 현재 사용자 권한이 SELLER일때만 표시
item_reg.html 작성
<!DOCTYPE html>
<html lang="en" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
<title>상품 등록 페이지</title>
<div th:replace="/fragments/header.html :: header"></div>
</head>
<body>
<div th:replace="/fragments/nav.html :: nav"></div>
<div class="container">
<h1>상품 등록</h1>
<form th:action="@{/item/item_reg}" method="post">
<div class="mb-3">
<label for="name" class="form-label">상품명</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="mb-3">
<label for="price" class="form-label">가격</label>
<input type="number" class="form-control" id="price" name="price" required>
</div>
<div class="mb-3">
<label for="count" class="form-label">재고</label>
<input type="number" class="form-control" id="count" name="count" required>
</div>
<div class="mb-3">
<label for="content" class="form-label">상품 설명</label>
<textarea class="form-control" id="content" name="content" required></textarea>
</div>
<button type="submit" class="btn btn-primary">상품 등록</button>
</form>
</div>
</body>
</html>
ItemDto 작성
@Data
public class ItemDto {
private String name;
private String content;
private int price;
private int count;
private Member member;
public Item toEntity(){
return Item.builder()
.name(name)
.content(content)
.price(price)
.count(count)
.member(member)
.build();
}
}
ItemController 추가
@Controller
@RequestMapping("/item")
@RequiredArgsConstructor
public class ItemController {
private final ItemService itemService;
/**
* 상품등록 페이지
*/
@GetMapping("/item_reg")
public String item_reg(){
return "item/item_reg";
}
@PostMapping("/item_reg")
public String item_reg(@ModelAttribute ItemDto itemDto, Principal principal){
itemService.item_reg(itemDto, principal.getName());
return "redirect:/";
}
}
/item/item_reg 경로로 GET요청시 item_reg.html 리턴
/item/item_reg 경로로 POST요청시
@ModelAttribute 어노테이션을 이용하여 item_reg.html의 form의 value를
ItemDto와 매핑하고
Principal객체로 현재 사용자 정보를 service로넘겨준뒤
"/" 경로로 redirect한다.
ItemService 추가
ItemService
public interface ItemService {
List<Item> itemList();
void item_reg(ItemDto itemDto, String email); // 추가
}
ItemServiceImpl 추가
@Service
@RequiredArgsConstructor
public class ItemServiceImpl implements ItemService {
private final ItemRepository itemRepository;
private final MemberRepository memberRepository;
public List<Item> itemList(){
return itemRepository.findAll();
}
// 추가
public void item_reg(ItemDto itemDto, String email){
Member member = memberRepository.findByEmail(email);
itemDto.setMember(member);
itemRepository.save(itemDto.toEntity());
}
}
controller에서 넘겨준 itemDto와 현재사용자이름으로
MemberRepository에서 조회한 후 itemDto에 member로 추가
toEntity메서드로 변환하여 DB에 save한다.
index.html 추가
<div sec:authorize="hasAuthority('SELLER')">
<a class="btn btn-primary" href="/item/item_reg">상품 등록</a>
</div>
테이블 하단에 상품등록 버튼을 추가해주었다.
sec:authorize="hasAuthority('SELLER')" : 현재 사용자 권한이 SELLER일때만 표시