1. 수정버튼 누르면 수정페이지로 이동
2. 수정페이지엔 기존상품들의 정보가 채워져있음
3. 전송누르면 기존DB에 덮어쓰기
1. a태그로 수정페이지 연결하기
누가 edit/1로 접속하면 1번상품의 데이터 가져와주기
(처음부터 한방에 다 하려 하지말고 하나씩 해결해나가기)
<a href="/edit/1">수정</a>
<div class = "card" th:each="i :${items}">
<img src="https://placehold.co/300">
<div><a th:href="@{'/detail/' + ${i.id} }">
<h4 th:text="${i.title}" >바지</h4></a>
<p th:text="${i.price + '원'}" >7억</p>
<a href="/edit/1">수정</a>
</div>
</div>
1-2 컨트롤러가서 페이지 연결하는 API 만들기
@GetMapping("/edit/{id}")
String editItems() {
return "edit.html";
}
2. 수정페이지 만들기
input에 사용자가 수정할 데이터가 들어가있게하려면
타임리프 문법으로 이렇게 th:value하고 함수 써줘야함 이렇게하면 값을 넣어줌
타임리프로 태그에 값넣어주기
<input name="title" th:value="${data.title}" >
form태그에 action 태그랑 method post 적어주기
<form action="/editForm" method="post">
상품수정을 하려면 id값도 알아야하는데 서버에 보낼때 같이보내게 하기위해
사용자는 안보이게 display:none을 이용해서 값을 숨겨놓기
<input name="id" th:value="${data.id}" style="display:none">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href=" /main.css" rel="stylesheet">
</head>
<body>
<div th:replace="~{nav.html::navbar}"></div>
<form action="/editForm" method="post">
<input name="id" th:value="${data.id}" style="display:none">
<input name="title" th:value="${data.title}" >
<input name="price" th:value="${data.price}">
<button type="submit">전송</button>
</form>
</body>
</html>
2-2 DB에서 해당하는 값 가져오기
3step 잊지말기
[Spring Boot] JPA로 DB데이터 입출력하기
JPA 사용방법 3step 1. repository 만들기 1-1 자바폴더에다가 테이블명Repository interface 파일 만듬1-2 extends JpaRepositoryimport org.springframework.data.jpa.repository.JpaRepository;public interface ItemRepository extends JpaRepos
k-kk.tistory.com
사용자가 입력한 주소값?에 값을 가져오려면 파라미터에
@PathVariable("id") Long id
indById()로 해당하는 id의 값 가져와주고
Optional<Item> reslut = itemRepository.findById(id);
get()을 이용해서
model.addAttribute 로 HTML에 값 넘겨주기
model.addAttribute("data",reslut.get());
혹시나 null값을 가져올수도 있으니 물어봐주기
(Optional로 값 가져오려면 무조건 해야하는 절차임)
if (reslut.isPresent()) {
@GetMapping("/edit/{id}")
String editItems(@PathVariable("id") Long id,
Model model) {
try{
Optional<Item> reslut = itemRepository.findById(id);
if (reslut.isPresent()) {
System.out.println(reslut.get());
model.addAttribute("data",reslut.get());
return "edit.html";
}else {
return "redirect:/list";
}
} catch (Exception e) {
return "redirect:/list";
}
}
3. 전송누르면 기존DB에 덮어쓰기위해 POST API 만들어주기
form action태그에 썼었던 /editForm 로
html에서 넘어올 값을 받기위해 파라미터를 적어주고
@RequestParam(name ="title") String title,
@RequestParam(name ="price") int price){
값을 넣을 item 오브젝트 하나 생성시켜주고
Item item = new Item();
set으로 가져온값 넣어주기
근데 우린 1번만 넣어봤기때문에 만약 1번말고 2번3번도 넣으려면 어떻게 해야할까?
서버가 모르는값을 넣으려면 방법이 2가지인데
1. 유저한테 보내라고 하기
2. DB에서 가져오기
우리는 유저한테 가져오게 했기때문에 id 파라미터를 적어주고 set으로 넣어주기
Long id
item.setId(id);
item.setTitle(title);
item.setPrice(price);
save로 저장해주면 끝
itemRepository.save(item);
@PostMapping("/editForm")
// String addPost(@RequestParam Map formData){
String editForm(
@RequestParam(name ="title") String title,
@RequestParam(name ="price") int price){
Item item = new Item();
item.setId(1L);
item.setTitle(title);
item.setPrice(price);
itemRepository.save(item);
중요한건 데이터입출력기능들은 service로 옮겨야함
1. itemService에 editForm 함수 만들기
id,title,price를 넘겨받아와야하기 때문에 파라미터에 등록하기
public void editForm(Long id,String title,Integer price){
item에 가져온값 넣어주기
Item editForm = new Item(id,title,price);
save()를 이용하여 저장
itemRepository.save(editForm);
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ItemService {
//검사하거나 DB입출력하는것을 비즈니스 로직이라고 부름
//그 비즈니스로직을 담는 클래스를 Service라고 부름
private final ItemRepository itemRepository;
public void saveItem(String title,Integer price){
//파라미터를 받아와야 쓸수있기때문에 파라미터도 등록해줌
//itemRepository도 받아와야하기때문에 등록해주기
//어떻게? JPA 3step!기억하자! 근데! 이미 파일은 만들어줬으니
//private final ItemRepository itemRepository; 써주고
//@RequiredArgsConstructor 이거 붙여주면 됨
System.out.println(title);
System.out.println(price);
Item addItem = new Item(title,price);
itemRepository.save(addItem);
}
public void editForm(Long id,String title,Integer price){
System.out.println(id);
System.out.println(title);
System.out.println(price);
Item editForm = new Item(id,title,price);
itemRepository.save(editForm);
}
}
2. controller에 service에서 만든 editForm 생성해서 id,title,price 넘겨주기
itemService.editForm(id,title,price);
최종
@PostMapping("/editForm")
String editForm(
@RequestParam(name ="title") String title,
@RequestParam(name ="price") int price,
Long id){
itemService.editForm(id,title,price);
return "redirect:/list";
}
'SPRING' 카테고리의 다른 글
[Spring Boot]AJAX로 상품삭제기능만들기 / 자바스크립트 query string타임리프 문법 (0) | 2025.03.25 |
---|---|
[Spring Boot]AJAX기능 간단하게 배우기 서버로 요청 날리는법 (1) | 2025.03.24 |
[Spring Boot] dependency injection이란? -수정중- (0) | 2025.03.21 |
[Spring Boot] @Service 레이어로 분리해주기 (0) | 2025.03.21 |
[Spring Boot] 예외발생시/ REST API 서버에서의 예외처리 (0) | 2025.03.20 |