일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 시큐리티 로그인
- gradle
- springboot
- 반복문
- javascript
- 리눅스
- 스프링 부트
- java
- codingtest
- 프로그래머스
- 싱글톤
- Spring boot
- StyleSheet
- 로그인
- html
- JAVA11
- springSecurity
- programmers
- sql
- 소스트리
- input태그
- 목록
- 시큐리티 로그아웃
- Linux
- css
- 코딩테스트
- 시큐리티
- 시큐리티로그인
- 2차원배열
- security
Archives
- Today
- Total
JAVAIARY
Spring Boot) 게시글 등록 페이지 / 등록 처리 본문
등록 처리는 이미 GuestbookService까지 완성되었기 때문에 GuestbookController 수정하여 이용
1. 게시글 등록 처리 메서드 작성
GuestbookController
@GetMapping("/register")
public void register(){
log.info("register get...");
}
@PostMapping("/register")
public String registerPost(GuestbookDTO dto, RedirectAttributes redirectAttributes){
log.info("dto..." + dto);
// 새로 추가된 엔티티의 번호
Long gno = service.register(dto);
redirectAttributes.addFlashAttribute("msg", gno);
return "redirect:/guestbook/list";
}
- 게시글 등록 후 보여줄 모달창에 넣어줄 msg
2. 게시글 작성화면
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<th:block th:replace="~{/layout/basic :: setContent(~{this::content} )}">
<th:block th:fragment="content">
<h1 class="mt-4">GuestBook Register Page</h1>
<form th:action="@{/guestbook/register}" th:method="post">
<div class="form-group">
<label>Title</label>
<input type="text" class="form-control" name="title" placeholder="Enter Title">
</div>
<div class="form-group">
<label>Content</label>
<textarea class="form-control" rows="5" name="content"></textarea>
</div>
<div class="form-group">
<label>Writer</label>
<input type="text" class="form-control" name="writer" placeholder="Enter Writer">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</th:block>
</th:block>
</html>
- action 속성 값을 '/guestbook/register' 로 지정 및 post 방식으로 전송
- <input> 태그에는 GuestbookDTO로 수집될 데이터이므로 name값을 Dto와 맞춰줌
3. 목록 페이지 모달창
list.html 에 모달창과 javascript 추가
</ul>
<div class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<p>Modal body text goes here.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
<script th:inline="javascript">
var msg = [[${msg}]]
console.log(msg);
if(msg){
$(".modal").modal();
}
</script>
</th:block>
4. 등록페이지/ 조회 페이지 링크
list.html
- 등록페이지 링크 버튼 삽입
<h1 class="mt-4">GuestBook List Page
<span>
<a th:href="@{/guestbook/register}">
<button type="button" class="btn btn-outline-primary">Register</button>
</a>
</span>
</h1>
- 조회페이지 링크 삽입
<tr th:each="dto : ${result.dtoList}">
<th scope="row" ><a th:href="@{/guestbook/read(gno=${dto.gno}, page=${result.page})}">[[${dto.gno}]]</a></th>
<td>[[${dto.title}]]</td>
<td>[[${dto.writer}]]</td>
<td>[[${#temporals.format(dto.regDate,'yyyy/MM/dd')}]]</td>
</tr>
5. 조회처리
5-1. 서비스계층 구현
GuestbookService와 ServiceImpl에 메서드 작성
GuestbookDTO read(Long gno);
@Override
public GuestbookDTO read(Long gno) {
Optional<Guestbook> result = repository.findById(gno);
return result.isPresent()? entityToDTO(result.get()):null;
}
5-2. GuestbookController
@GetMapping("/read")
public void read(long gno, @ModelAttribute("requestDTO") PageRequestDTO requestDTO, Model model){
log.info("gno: " + gno);
GuestbookDTO dto = service.read(gno);
model.addAttribute("dto", dto);
}
- @ModelAttribute 는 없어도 처리가 가능하지만 명시적으로 requestDTO 라는 이름으로 처리
5-3. read.html
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<th:block th:replace="~{/layout/basic :: setContent(~{this::content} )}">
<th:block th:fragment="content">
<h1 class="mt-4">GuestBook Read Page</h1>
<div class="form-group">
<label>Gno</label>
<input type="text" class="form-control" name="gno" th:value="${dto.gno}" readonly>
</div>
<div class="form-group">
<label>Title</label>
<input type="text" class="form-control" name="title" th:value="${dto.title}" readonly>
</div>
<div class="form-group">
<label>Content</label>
<textarea class="form-control" rows="5" name="content" readonly>[[${dto.content}]]</textarea>
</div>
<div class="form-group">
<label>Writer</label>
<input type="text" class="form-control" name="writer" th:value="${dto.writer}" readonly>
</div>
<div class="form-group">
<label>RegDate</label>
<input type="text" class="form-control" name="regDate" th:value="${#temporals.format(dto.regDate, 'yyyy/MM/dd HH:mm:ss')}" readonly>
</div>
<div class="form-group">
<label>ModDate</label>
<input type="text" class="form-control" name="modDate" th:value="${#temporals.format(dto.modDate, 'yyyy/MM/dd HH:mm:ss')}" readonly>
</div>
<a th:href="@{/guestbook/modify(gno=${dto.gno}, page=${requestDTO.page})}"><button type="button" class="btn btn-primary">Modify</button></a>
<a th:href="@{/guestbook/list(page=${requestDTO.page})}"><button type="button" class="btn btn-info">List</button></a>
</th:block>
</th:block>
</html>
- readonly 속성 적용
- 목록페이지 링크, 수정, 삭제 링크 제공
'Project > 2023.02~ ) Study toy 프로젝트' 카테고리의 다른 글
N:1(다대일) 연관관계 1 (0) | 2023.03.01 |
---|---|
검색 처리 (0) | 2023.02.27 |
Spring Boot) 게시글 수정/ 삭제 처리 (0) | 2023.02.21 |
Spring Boot) 목록처리 (0) | 2023.02.20 |
Spring Boot) 서비스 계층과 DTO (0) | 2023.02.20 |