티스토리 뷰
안녕하세요 강정호 입니다.
오늘은 게시판 프로젝트에서 게시판 뷰를 만들어보려고 합니다.
ArticleController와 index.html에 데이터를 뿌려서 보여줄 예정입니다.
ArticleController.java
@RequiredArgsConstructor
@RequestMapping("/articles")
@Controller
public class ArticleController {
private final ArticleService articleService;
/**
* 사용 목적 : 검색타입, 검색어, 페이징을 파라메터로 받아서
* article 리스트를 응답해주는 api
* */
@GetMapping
public String articles(
@RequestParam(required = false) SearchType searchType,
@RequestParam(required = false) String searchValue,
@PageableDefault(size = 10, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable,
ModelMap map
){
/**
* ModelMap 사용하는 이유
* ModelMap에 데이터만 저장하여 View에서 사용하기 위해서이다.
* ModelAndView는 데이터와 View 화면명 정보까지 같이 저장한다.
*
* @RequestParam : URL에서 파라미터 값과 이름을 함께 전달하는 방식으로 게시판 등에서 페이지 및 검색정보를
* 함께 전달하는 방식으로 사용할 때 많이 쓴다. 주로 GET방식의 통신을 할 때 쓴다.
* */
map.addAttribute("articles", articleService.searchArticles(searchType, searchValue, pageable).map(ArticleResponse::from));
return "articles/index";
}
}
게시판 조회 URL : /articles
/articles 로 호출하면 자동으로 ArticleController에서 Mapping이 된다.
이 때 입력한 검색타입, 검색어를 이용해서 ArticleService에서 게시글을 조회해온다.
ModelMap 이라는 데이터 저장 객체에 "articles" 라는 이름으로 Key, value 형식으로 속성을 저장한다.
그리고 articles/index 페이지에 리턴.
게시글이 for문이 돌아서 게시글리스트가 조회되는 부분.
index.html
<table class="table" id="article-table">
<thead>
<tr>
<th class="title col-6">제목</th>
<th class="hashtag col-2">해시태그</th>
<th class="user-id col">작성자</th>
<th class="created-at col">작성일</th>
</tr>
</thead>
<tbody>
<tr>
<td class="title"><a>첫글</a></td>
<td class="hashtag">#java</td>
<td class="user_id">Uno</td>
<td class="created-at"><time>2022-01-01</time></td>
</tr>
<tr>
<td>두번째글</td>
<td>#spring</td>
<td>Uno</td>
<td><time>2022-01-02</time></td>
</tr>
<tr>
<td>세번째글</td>
<td>#java</td>
<td>Uno</td>
<td><time>2022-01-03</time></td>
</tr>
</tbody>
</table>
위 코드만으로는 DB에서 가져온 게시글 리스트를 반복해서 보여줄 수 없다.
그래서 table에 id="article-table" 을 설정하고 index.th.xml에서 반복해준다. 디커플링 방식으로 반복부를 따로 로직으로 빼내는 Thymeleaf 기술이다.
index.th.xml
<?xml version="1.0"?>
<thlogic>
<attr sel="#header" th:replace="header :: header"/>
<attr sel="#footer" th:replace="footer :: footer"/>
<attr sel="#article-table">
<attr sel="tbody" th:remove="all-but-first">
<attr sel="tr[0]" th:each="article : ${articles}">
<attr sel="td.title/a" th:text="${article.title}" th:href="@{'/article/'+${article.id}}" />
<attr sel="td.hashtag" th:text="${article.hashtag}" />
<attr sel="td.user-id" th:text="${article.nickname}" />
<attr sel="td.created-at/time" th:datetime="${article.createdAt}" th:text="${#temporals.format(article.createdAt, 'yyyy-MM-dd')}"/>
</attr>
</attr>
</attr>
</thlogic>
<attr sel="#article-table">에서 index.html의 article-table을 찾아서 반복문으로 데이터를 뿌려주는 역할을 한다.
th:remove
'Back-end' 카테고리의 다른 글
[프로젝트] Mysql -> Postgres DB 마이그레이션 (0) | 2023.07.18 |
---|---|
[프로젝트] 게시판 뷰 페이지 만들기(Thymleaf, ArticleController) (0) | 2023.06.06 |
[게시판 만들기] 추가해야 할 코드 (0) | 2023.05.14 |
[게시판페이지] 게시판 페이지 기능테스트 (0) | 2023.05.14 |
[게시판 개발하기] 뷰 만들기 (0) | 2023.05.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Use case
- push_back
- 항해솔직후기
- 항해플러스후기
- 도커
- front
- GIT
- 깃
- 인셉션
- 항해플러스백엔드
- github
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 2023년
- 월부닷컴
- 파라메터
- 유즈케이스
- docker
- 재테크공부
- resize
- 관계대수
- 열반스쿨기초반
- 월급쟁이부자들
- Spring boot
- 부동산공부
- 내년은 빡세게!!
- 폭포수
- 깃허브
- 개발자 회고
- Inception
- pop_back
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함