728x90
7.웹 계층 개발 1(회원,상품)
- 목차
- 1.홈 화면과 레이아웃
- 2.회원 등록
- 3.회원 목록 조회
- 4.상품 등록
- 5.상품 목록
- 6.상품 수정
1.홈 화면과 레이아웃
HomeController
@Controller
@Slf4j
public class HomeController {
@RequestMapping("/")
public String home(){
log.info("home controller");
return "home";
}
}
- @RequestMapping("/") : localhost:8080 -> home.html 이동한다
MemberForm
@Getter @Setter
public class MemberForm {
@NotEmpty(message = "회원 이름은 필수 입니다")
private String name;
private String city;
private String street;
private String zipcode;
}
- 회원의 정보를 MemberForm 을 이용해서 만들어준다
MemberController(회원등록)
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("/members/new")
public String createForm(Model model){
model.addAttribute("memberForm",new MemberForm());
return "members/createMemberForm";
}
@PostMapping("/members/new")
public String create(@Valid MemberForm memberForm , BindingResult result){
if (result.hasErrors()){
return "members/createMemberForm";
}
Address address = new Address(memberForm.getCity(), memberForm.getStreet(), memberForm.getZipcode());
Member member =new Member();
member.setName(memberForm.getName());
member.setAddress(address);
memberService.join(member);
return "redirect:/";
}
}
- MemberForm 의 객체를 가져와서 createMemberForm.html 으로 이동
- form 에서 post 를 이용해서 값을 불러옴
- @PostMapping("/members/new") 을 이용해서 가져온 데이터를 저장해주고 첫번째 페이지로 보냄
- 에러가 있을 경우 BindingResult result 값 으로 가져온다
- ! Member 엔티티 대신 MemberForm 을 넣은 이유는 화면에 맞는 데이터값을 가져오기 위해서 넣었다!
- 서버사이드 에서 html 을 랜더링
MemberController (회원목록조회)
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("/members")
public String list(Model model){
List<Member> members =memberService.findMembers();
model.addAttribute("members",members);
return "members/memberList";
}
}
ItemController (상품등록)
@Controller
@RequiredArgsConstructor
public class ItemController {
private final ItemService itemService;
@GetMapping("/items/new")
public String createForm(Model model){
model.addAttribute("form",new BookForm());
return "items/createItemForm";
}
@PostMapping("/items/new")
public String create(BookForm form){
Book book=new Book();
book.setName(form.getName());
book.setPrice(form.getPrice());
book.setStockQuantity(form.getStockQuantity());
book.setAuthor(form.getAuthor());
book.setIsbn(form.getIsbn());
itemService.saveItem(book);
return "redirect:/";
}
}
ItemController (상품목록)
@Controller
@RequiredArgsConstructor
public class ItemController {
private final ItemService itemService;
@GetMapping(value = "/items")
public String list(Model model) {
List<Item> items = itemService.findItems();
model.addAttribute("items", items);
return "items/itemList";
}
}
- 목록을 조회할때는 GetMapping
- model.addAttribute("members",members) view 에 key 값인 members 를 보낸다
- 요구사항이 간단해서 member 엔티티를 가져왔지만 memberList 를 하나 만들어서 가져오는것이 좋다
- 엔티티는 최대한 순수하게 설계하기
- PostMapping 값셋팅 왠만하면 setter 를 쓰지말고 생성자,정적 팩토리 매서드 , builder 패턴을 사용하자
ItemController (상품수정)
@Controller
@RequiredArgsConstructor
public class ItemController {
private final ItemService itemService;
@GetMapping("/items/{itemId}/edit")
public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) {
Book item = (Book) itemService.findOne(itemId);
BookForm form = new BookForm();
form.setId(item.getId());
form.setName(item.getName());
form.setPrice(item.getPrice());
form.setStockQuantity(item.getStockQuantity());
form.setAuthor(item.getAuthor());
form.setIsbn(item.getIsbn());
model.addAttribute("form", form);
return "items/updateItemForm";
}
/**
* 상품 수정
*/
@PostMapping(value = "/items/{itemId}/edit")
public String updateItem(@PathVariable("itemId") String itemId, @ModelAttribute("form") BookForm form) {
Book book = new Book();
book.setId(form.getId());
book.setName(form.getName());
book.setPrice(form.getPrice());
book.setStockQuantity(form.getStockQuantity());
book.setAuthor(form.getAuthor());
book.setIsbn(form.getIsbn());
itemService.saveItem(book);
return "redirect:/items";
}
}
- @PathVariable 는 URL 경로에 변수를 넣어준다 {itemId}
- @ModelAttribute 붙은 객체가 자동으로 Model 객체에 추가되고 뷰로 이동한다
참고자료
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard (웹 애플리케이션개발)
728x90
'Back-End > Spring Data' 카테고리의 다른 글
9.웹 계층 개발 2(주문) (0) | 2021.01.01 |
---|---|
8.변경감지 와 병합 (0) | 2021.01.01 |
6.주문도메인개발 (0) | 2020.12.30 |
5.상품도메인 개발 (0) | 2020.12.30 |
4.회원도메인 개발 (0) | 2020.12.30 |