study

(230609) StudentDTO 생성 / MVC 패턴 예제 / 어노테이션

hjkeeeem 2024. 9. 3. 01:42

@RequestParam : 그곳에 보내는 '데이터' (택배같은 것)

@PathVariable : url 상에 표현된 변수를 활용하기 위해 사용 (어디를 나타내는)

 

 

Update

1. 상세보기 -> 업데이터 페이지

2. 업데이트 페이지 -> form 만들기

3. form을 통한 Controller 만들고, @PostMapping

4. Service에서 갱신

5. 상세보기 페이지로 돌아옴 (redirect to)

 

update.html 파일 만들기

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Update</title>
</head>
<body>
<h1>Update Student</h1>
<form action="" method="post">
    <label for="name-input">
        Name : <input id="name-input" name="name">
    </label>
    <label for="email-input">
        Email : <input id="email-input" name="email"
    </label>
    <br>

    <!-- 데이터 제출 버튼 -->
    <input type="submit">
</form>
<a th:href="@{/{id} (id=${student.id})}">Back</a>
</body>
</html>

 

Controller 에서 updateView() 생성

@GetMapping("/{id}/update-view")
    public String updateView(@PathVariable("id") Long id, Model model){ // 아이디와 Model 받아오기
        model.addAttribute("student", studentService.readStudent(id)); //Model에 student 데이터 부여
        return "update";// update.html 돌려주기
    }

 

 

StudentService 구현

public StudentDTO updateStudent(Long id, String name, String email) { //갱신될 것들을 인자로 추가
        //하나의 StudentDTO를 찾아서
        int target = -1;
        // studentDTO 크기만큼 반복
        for (int i = 0; i < studentList.size(); i++) {
            // i가 동일한 studentDTO 찾았으면
            if(studentList.get(i).getId().equals(id)){
                //인덱스 기록
                target = i;
                //반복 종료
                break;
            }
        }
        // 대상을 찾았다면
        if(target != -1){
            // name과 email을 각각 바꿔주자
            studentList.get(target).setName(name);
            studentList.get(target).setEmail(email);
            return studentList.get(target);
        }
        // 대상을 못 찾았다면
        else return null;
    }

 

 

 

Controller에서 본격적인 데이터를 넘겨줄 update() 생성

@PostMapping("/{id}/update")
    public String update(@PathVariable("id") Long id, // 어디로 들어온 요청인지 PathVariable
                         @RequestParam("name") String name, //데이터를 읽기위한 RequestParam
                         @RequestParam("email") String email //데이터를 읽기위한 RequestParam
                         ){
//        model.addAttribute("student", studentService.updateStudent(id, name, email));
        studentService.updateStudent(id,name,email);
        return "redirect:/{id}";
    }

Model model을 추가하지 않았는데 이유는 모르겠다 (물어보기) 하지만 저렇게도 사용이 가능하다.

 

 

 

update.html의 <form> 부분의 action을 설정해준다.

<form th:action="@{/{id}/update (id=${student.id})}" method="post">

Q. action문법이 제출 버튼을 인식하는 건가요?

A. th:action : 여기로 가져와 주세요 

 

Q. Model 과 addAttribute를 사용하지 않아도 되는거였는지

A. d

 

Q. 

A. d

 

 

Delete

1. 상세보기 페이지에서 '삭제확인' 페이지로 이동 [ @GetMapping , id 필요 ]

2. 삭제확인 페이지에서 '삭제' 버튼 (<form>) + 뒤로가기 (상세보기 페이지로) [ @PostMapping , id 필요 ]

3. 삭제 성공 후 홈으로 이동  [ return "redirect:/" 필요 ]

 

 

delete.html 생성 (삭제확인 페이지 생성)

 

 

Controller delete-view 생성

read.html 수정

service 작성

action에 경로 넣어주기 (url)

 

 

https://melonicedlatte.com/2021/07/24/231500.html