Resolved
Written on
·
953
0
public class CompanyDTO {
private Long id;
private String name;
private Address address;
@GetMapping("register")
public String companyRegister(Model model) {
model.addAttribute("form", new CompanyDTO());
return "company/register";
}
@PostMapping("register")
public String companyRegister2(CompanyDTO companyDTO) {
companyService.saveCompany(companyDTO);
return "redirect:/company/list";
}
@GetMapping("list")
public String companyList(Model model) {
List<Company> companyList = companyService.findAll();
List<CompanyDTO> companyDTOList = companyService.transDTOList(companyList);
model.addAttribute("company_list", companyDTOList);
return "company/list";
}
<form th:action="@{register}" th:object="${form}" method="post">
<div class="form-group">
<label th:for="name">회사명</label>
<input type="text" th:field="*{name}" class="form-control"
placeholder="이름을 입력하세요">
</div>
<div class="form-group">
<label th:for="city">도시</label>
<input type="text" th:field="*{address.city}" class="form-control"
placeholder="주소를 입력하세요">
</div>
html list(조회부분) > 정상동작합니다
<tr th:each="company : ${company_list}">
<td th:text="${company.id}"></td>
<td th:text="${company.name}"></td>
<td th:text="${company.address.city}"></td>
감사합니다
Answer 2
1
안녕하세요 안준석님. 다음과 같이 샘플 코드 구현하여 테스트 해봤는데 정상 작동 하였습니다.
일단 2가지 확인이 필요할 것으로 보입니다.
1. 폼 데이터가 @PostMapping에서 값을 잘 받아오는지
@PostMapping("register")
public String companyRegister2(CompanyDTO companyDTO) {
companyService.saveCompany(companyDTO);
// companyDTO의 값을 log 혹은 콘솔 출력을 하여 잘 받아 왔는지 확인
return "redirect:/company/list";
}
2. 잘 받아 왔다면 DB까지 가는 과정에서 값의 변경이 있는지
companyService.saveCompany(companyDTO); // 이 saveCompany부터 DB까지 과정에서 값이 제대로 저장되는지 확인
1
안녕하세요 안준석님!
혹시 input 태그에 name 속성을 줘보시겠어요? 아래처럼요.
<input type="text" name="name" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요">
<input type="text" name="address.city" th:field="*{address.city}" class="form-control" placeholder="주소를 입력하세요">
.
감사합니다.
답변감사해요
말씀대로 해보았는데, html에서 나타나는 name과 전송되는 값에는 변화가 없었어요.
아래는 구글 개발자도구로 본 input태그의 name입니다.
답변 고마워요.
PostMapping에서 Address값이 null인것을 확인했고,
올려주신 코드랑 비교하면서 원인을 계속찾다가,
Address클래스에 Getter만 설정해뒀던것을 발견했어요
만들때는 Address도 엔티티안에 속하니 Setter가 없는편이 나을거라 생각해 없앴는데,
Setter가없으니 당연히 값이 안받아와졌던 거네요
이 부분은 AddressDTO를 하나더 추가해서 해결하였어요.
감사합니다.