롬복의 @Data는 모든 메서드를 다 추가해주기 때문에 사용 권장하지 않음(사용할때 주의 해야함)
보통 @Getter, @Setter정도만 추가해서 사용
<html xmlns:th="http://www.thymeleaf.org">
<span th:text="'Welcome to our application, ' + ${user.name} + '!'">
<span th:text="|Welcome to our application, ${user.name}!|">
<tr th:each="item : ${items}">
<tr>..</tr>
이 하위 태그를 포함해서 생성<td th:text="${item.price}">10000</td>
(item.getPrice())
<td th:text="${item.price}">10000</td>
th:href="@{/basic/items/{itemId}(itemId=${item.id})}"
th:href="@{/basic/items/{itemId}(itemId=${item.id}, query='test')}"
http://localhost:8080/basic/items/1?query=test
th:href="@{|/basic/items/${item.id}|}"
@PostMapping("/add")
> th:action="/basic/items/add" 또는 th:action로 적어주면 됨// @PostMapping("/add")
public String addItemV1(@RequestParam String itemName,
@RequestParam int price,
@RequestParam Integer quantity,
Model model
){
Item item=new Item();
item.setItemName((itemName));
item.setPrice(price);
item.setQuantity(quantity);
itemRepository.save(item);
model.addAttribute("item",item);
return "basic/item";
}
@RequestParam String itemName
에서 itemName은 html 폼에서 데이터의 name @PostMapping("/add")
public String addItemV2(@ModelAttribute("item") Item item){
itemRepository.save(item);
//ModelAttribute("네임속성")을 사용해서 자동으로 모델에 넣어주는 기능이 있음
//네임속성에 지정해둔 이름을 가지고 넣어줌
//model.addAttribute("item",item); //자동추가, 생략 가능
return "basic/item";
}
Item item=new Item();
item.setItemName((itemName));
item.setPrice(price);
item.setQuantity(quantity);
@PostMapping("/add")
public String addItemV3(@ModelAttribute Item item){
//ModelAttribute의 네임속성을 지우면 클래스명(Item)을 첫글자만 소문자로 바꿔서(item) Model에 담기게 됨
itemRepository.save(item);
return "basic/item";
}
@PostMapping("/add")
public String addItemV4(Item item){
itemRepository.save(item);
return "basic/item";
}
상품 수정은 마지막에 뷰 템플릿을 호출하는 대신에 상품 상세 화면으로 이동하도록 리다이렉트를 호출
@PostMapping("/{itemId}/edit")
public String edit(@PathVariable Long itemId, @ModelAttribute Item item){
itemRepository.update(itemId, item);
return "redirect:/basic/items/{itemId}"; //{itemId} > PathVariable에 있는 것 사용
}
redirect:/basic/items/{itemId}
참고
HTML Form 전송은 PUT, PATCH를 지원하지 않고 GET, POST만 사용할 수 있음
PUT, PATCH는 HTTP API 전송시에 사용
POST 등록 후 새로 고침
POST, Redirect GET
GET /items/{id}
@PostMapping("/add")
public String addItemV5(Item item){
itemRepository.save(item);
return "redirect:/basic/items/"+item.getId();
}
@PostMapping("/add")
public String addItemV6(Item item, RedirectAttributes redirectAttributes){
Item savedItem = itemRepository.save(item);
//redirect 관련된 속성들을 넣음
redirectAttributes.addAttribute("itemId",savedItem.getId());
redirectAttributes.addAttribute("status",true);
return "redirect:/basic/items/{itemId}";
//redirectAttributes에 넣은 itemId 값이 치환이 됨
//나머지는 쿼리 파라미터 형식으로 들어감 (?status=true)
}
?status=true
item.html
<!-- 추가 -->
<h2 th:if="${param.status}" th:text="'저장 완료!'"></h2>