Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 패스트캠퍼스
- Algorism study
- 클래스 상속
- Interface
- 메가바이트스쿨
- #javaStudy
- array
- View
- spring boot
- MegabyteSchool
- 국비지원교육
- AWS
- tomcat
- MVC 패턴
- MVC
- 클래스 class
- crud
- Spring
- GIT
- 게시판 만들기
- Sts
- side project
- github
- 게시판 리뷰 만들기
- group study
- Entity
- Java
- #패스트캠퍼스 #국비지원교육 #메가바이트스쿨 #MegabyteSchool #개발자취업부트캠프 #내일배움카드
- 개발자취업부트캠프
- 내일배움카드
Archives
- Today
- Total
tuter77
게시판 만들기(9) - Controller 및 Service 클래스 수정 본문
● Controller 및 Service 클래스 수정
▷ 저장 및 수정.
컨트롤러 내에서 repository를 그대로 이용하는 것은 service클래스를 쓰는 의미가 없다는 것을 잊고 작업하였다가 이번에 수정하게 되었다.
또한 엔티티에서 Setter를 사용하는것은 안좋다고 하여 Setter 어노테이션을 제거했는데, 데이터값이 전달되지않아 다시 넣었다.(이 부분에서 시간을 다 잡아먹었다.)
또 시간이 많이 들었던 부분은 modify 기능이다. 해당 기능을 controller에 Setter로 구현해놓았을때는 괜찮았으나, Service로 옮기면서 수정기능이 실행되지않았다.
수정된 저장
- 컨트롤러
@GetMapping("/write") // 저장 페이지.
public String write(){
return "writer";
}
@PostMapping("/write/post") //저장 기능 구현.
public String writerPost(HealthInfo healthInfo){
homeService.write(healthInfo);
return "redirect:/home"; //prg패턴.
}
- 서비스
@Override //저장기능
public void write(HealthInfo healthInfo) {
healthRepository.save(healthInfo);
}
- 수정하지 못한 업데이트
@PostMapping("/home/modified/update/{id}")
public String postUpdate(@PathVariable Long id, HealthInfo healthInfo) {
HealthInfo healthInfoTemp = homeService.healthView(id);
healthInfoTemp.setBrand_name(healthInfo.getBrand_name());
healthInfoTemp.setLand_number(healthInfo.getLand_number());
healthInfoTemp.setRoad_number(healthInfo.getRoad_number());
healthInfoTemp.setCategory(healthInfo.getCategory());
homeService.write(healthInfo);
return "redirect:/home";
}
/* @Override //수정기능 값이 저장이 안됨.
public void modifiedUpdate(Long id) {
HealthInfo healthInfotmp = healthView(id);
healthInfotmp.setBrand_name(healthInfo.getBrand_name());
healthInfotmp.setLand_number(healthInfo.getLand_number());
healthInfotmp.setRoad_number(healthInfo.getRoad_number());
healthInfotmp.setCategory(healthInfo.getCategory());
write(healthInfotmp);
}*/
엔티티값을 setter로 사용하면 안되는데, 아직 id값을 전달하지 못해서 헤메고 있다.
▷ 페이징 기능 구현.
기존 home.html 파일을 두고 페이징 처리한 html 파일을 새로 만들었다.
그리고 서비스 클래스에서는 pageable 객체를 매개변수로 받아 데이터를 모두 찾아 페이지 타입으로 반환했다.
컨트롤러에서는 서비스의 메서드로 찾아온 값들을 페이지 타입의 변수에 저장하고, 해당 변수를 model 객체에 add해준다.
- 컨트롤러
@GetMapping("/page")
public String pageHome(Model model, Pageable pageable) {
Page<HealthInfo> healthInfoPage = homeService.healthList(pageable);
model.addAttribute("pages",healthInfoPage);
model.addAttribute("maxPage",5);
return "page";
}
- 서비스
@Override
public Page<HealthInfo> healthList(Pageable pageable){
return healthRepository.findAll(pageable);
}
- 페이지 html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>헬스장 정보 페이지</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<h1>Homepage</h1>
</tr>
<button type="submit" onclick="location.href='/write'">글쓰기</button>
</thead>
<tbody>
<tr th:each = "healthInfo:${pages}">
<td th:text="${healthInfo.id}"></td>
<td>
<a th:text="${healthInfo.brand_name}"
th:href="@{/home/view(id=${healthInfo.id})}">
</a>
<a th:href="@{/home/delete(id=${healthInfo.id})}">삭제</a>
</td>
</tr>
</tbody>
</table>
<div class="page-num"
th:with="start=${(pages.number/maxPage)*maxPage + 1},
end=(${(pages.totalPages == 0) ? 1 : (start + (maxPage - 1) < pages.totalPages ? start + (maxPage - 1) : pages.totalPages)})">
<ul>
<li th:if="${start > 1}">
<a th:href="@{/page?(page=0)}" th:text="'<<'"></a></li>
</li>
<li th:if="${start > 1}">
<a th:href="@{/page?(page=${start - maxPage})}" th:text="'<'"></a>
</li>
<li th:each="page: ${#numbers.sequence(start, end)}">
<a th:href="@{/page?(page=${page-1})}" th:text="${page}"></a></li>
</li>
<li th:if="${end < pages.totalPages}">
<a th:href="@{/page?(page=${start + maxPage})}" th:text="'>'"></a>
</li>
<li th:if="${end < pages.totalPages}">
<a th:href="@{/page?(page=${pages.totalPages-1})}" th:text="'>>'"></a></li>
</li>
</ul>
</div>
</body>
</html>
html 파일에서 번호를 지정하는 계산식은 모두 긁어왔는데, 아직은 계산방법을 온전히 이해하지 못했다.
테스트 결과 페이지가 정상작동했다.
위 내용은 2023.01.17에 공부한 내용입니다.
'GroupStudy' 카테고리의 다른 글
| 게시판 만들기(11) - 작업내용 수정. (0) | 2023.01.29 |
|---|---|
| 게시판 만들기(10) - Review CRUD 구현 (0) | 2023.01.29 |
| 게시판 만들기(8) - update 구현 (0) | 2023.01.29 |
| 게시판 만들기(7) - 저장, 삭제 기능 구현 (0) | 2023.01.29 |
| 게시판 만들기(6) 엔티티 연관관계 설정 및 view구현. (0) | 2023.01.29 |