쌓고 쌓다
[스프링 부트] 게시글 상세보기 with @RequestParam - 4 본문
posterList.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<th>ID</th>
<th>title</th>
<th>writer</th>
<th>date</th>
<tr th:each="poster : ${posters}">
<td th:text="${poster.id}"></td>
<td><a th:text="${poster.title}" th:href="@{/poster/read(id=${poster.id})}"></a></td>
<td th:text="${poster.writer}"></td>
<td th:text="${#temporals.format(poster.regdate, 'yyyy.MM.dd HH:mm')}"></td>
</tr>
</table>
</body>
</html>
게시글 전체 출력 시
게시글 제목에 링크를 이용해 상세 보기 페이지를 요청한다.
"/poster/read?id=1" 형식으로 PK를 이용해 원하는 게시글을 지정하여 GET 요청을 보낸다.
게시글들 출력 시
각 게시글의 제목에 해당하는 ID를 연결하여 GET 요청을 보내게 링크를 걸어둔다.
<a th:text="${poster.title}" th:href="@{/poster/read(id=${poster.id})}"></a>
타임리프 링크
<!-- 특정 URL -->
<a th:href="@{https://www.nvaer.com}">네이버</a>
<!-- 서버 내 이동 -->
<a th:href="@{/posters}"></a>
<!-- 파라미터 이용 -->
<a th:href="@{/poster/read(id=${poster.id})}"</a>
PosterController
@Controller
public class PosterController {
...
@GetMapping("/poster/read")
public String read(Model model,@RequestParam(value="id", required=true, defaultValue="1") Long id) {
Poster poster = posterService.findByOne(id).get();
model.addAttribute("poster", poster);
return "posters/posterView";
}
}
value="id" : /poster/read?id=3라면 id의 값 3이 Long id에 바인딩됩니다.
required : 파라미터의 입력이 필수인지 아닌지 결정합니다.
defaultValue : 파라미터를 전달하지 않았을 때 기본 값 지정합니다.
posterView.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<tr>
<th>제목</th>
<td th:text="${poster.title}"></td>
</tr>
<tr>
<th>작성자</th>
<td th:text="${poster.writer}"></td>
</tr>
<tr>
<th>작성일</th>
<td th:text="${#temporals.format(poster.regdate, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
<tr>
<th>내용</th>
<td th:text="${poster.content}"></td>
</tr>
</table>
</body>
</html>
@RequestParam(value와 name) 차이?
@RequestParam(value="id")
@RequestParam(name="id")
동일한 기능을 하나 두 개 동시에 사용할 순 없다.
참조: https://stackoverflow.com/questions/42326686/requestparam-name-vs-value-attributes
+ String, int와 같은 단순 타입이면 생략이 가능하다.
@Controller
public class PosterController {
...
@GetMapping("/poster/read")
public String read(Long id, Model model) {
Poster poster = posterService.findByOne(id).get();
model.addAttribute("poster", poster);
return "posters/posterView";
}
}
'프로그래밍 > spring' 카테고리의 다른 글
[스프링 부트] 게시글 작성 유효성 검사 및 폼 데이터 유지 - 6 (0) | 2023.06.30 |
---|---|
[스프링 부트] 게시글 삭제 - 5 (0) | 2023.06.28 |
Thymeleaf(타임리프) LocalDateTime 출력 및 작성일 만들기 - 3 (0) | 2023.06.25 |
[스프링 부트] MySQL 연결 및 JPA - 2 (0) | 2023.06.24 |
[스프링 부트] MySQL 연결 com.mysql.cj.jdbc.driver 에러(빨간줄) (0) | 2023.06.24 |
Comments