쌓고 쌓다

[스프링 부트] 게시글 상세보기 with @RequestParam - 4 본문

프로그래밍/spring

[스프링 부트] 게시글 상세보기 with @RequestParam - 4

승민아 2023. 6. 27. 18:58

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";
    }

}
Comments