03I. ๊ธ์ด์ด ํ์
03I. ๊ธ์ด์ด ํ์ ๊ด๋ จ
์์ Question
์ํฐํฐ์ Answer
์ํฐํฐ์ auther
์์ฑ์ ์ถ๊ฐํ๋ค. ๊ฒ์ํ์ ๊ฒ์๋ฌผ์๋ "๊ธ์ด์ด"๋ฅผ ํ์ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ์ง๋ฌธ ๋ชฉ๋ก, ์ง๋ฌธ ์์ธ ํ๋ฉด์ auther
์์ฑ์ ์ด์ฉํ์ฌ ๊ธ์ด์ด๋ฅผ ํ์ํด ๋ณด์.
์ง๋ฌธ ๋ชฉ๋ก
๋จผ์ ์ง๋ฌธ ๋ชฉ๋ก ํ ํ๋ฆฟ์ ๊ธ์ด์ด๋ฅผ ํ์ํด ๋ณด์. ๋ค์๊ณผ ๊ฐ์ด ํ ์ด๋ธ ํค๋์ ๊ธ์ด์ด ํญ๋ชฉ์ ์ถ๊ฐํ์.
ํ์ผ๋ช :
/sbb/src/main/resources/templates/
question_list.html
<!-- (... ์๋ต ...) -->
<tr class="text-center">
<th>๋ฒํธ</th>
<th style="width:50%">์ ๋ชฉ</th>
<th>๊ธ์ด์ด</th>
<th>์์ฑ์ผ์</th>
</tr>
<!-- (... ์๋ต ...) -->
<th>๊ธ์ด์ด</th>
ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ th
์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๋๋ก tr
ํ๊ทธ์ text-center
ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ณ ์ ๋ชฉ์ ๋๋น๊ฐ ์ ์ฒด์์ 50%๋ฅผ ์ฐจ์งํ๋๋ก style="width:50%"
๋ ์ง์ ํด ์ฃผ์๋ค.
์ด์ด์ for
๋ฌธ์๋ ๋ค์์ฒ๋ผ ๊ธ์ด์ด๋ฅผ ์ ์ฉํ์.
ํ์ผ๋ช :
/sbb/src/main/resources/templates/
question_list.html
<!-- (... ์๋ต ...) -->
<tr class="text-center" th:each="question, loop : ${paging}">
<td th:text="${paging.getTotalElements - (paging.number * paging.size) - loop.index}"></td>
<td class="text-start">
<a th:href="@{|/question/detail/${question.id}|}" th:text="${question.subject}"></a>
<span class="text-danger small ms-2" th:if="${#lists.size(question.answerList) > 0}"
th:text="${#lists.size(question.answerList)}">
</span>
</td>
<td><span th:if="${question.author != null}" th:text="${question.author.username}"></span></td>
<td th:text="${#temporals.format(question.createDate, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
<!-- (... ์๋ต ...) -->
<td> ... </td>
์๋ฆฌ๋จผํธ๋ฅผ ์ฝ์
ํ์ฌ ์ง๋ฌธ์ ๊ธ์ด์ด๋ฅผ ํ์ํ๋ค. ์์ฑ์ ์ ๋ณด ์์ด ์ ์ฅ๋ ์ด์ ์ ์ง๋ฌธ๋ค์ author
์์ฑ์ ํด๋นํ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก author
์์ฑ์ ๊ฐ์ด null
์ด ์๋ ๊ฒฝ์ฐ๋ง ํ์ํ๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ
์ด๋ธ ๋ด์ฉ์ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๋๋ก tr
์๋ฆฌ๋จผํธ์ text-center
ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ณ , ์ ๋ชฉ์ ์ผ์ชฝ ์ ๋ ฌํ๋๋ก text-start
ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ค.
์ง๋ฌธ ์์ธ
์ง๋ฌธ ์์ธ ํ ํ๋ฆฟ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ธ์ด์ด๋ฅผ ์ถ๊ฐํ์.
ํ์ผ๋ช :
/sbb/src/main/resources/templates/
question_detail.html
<!-- (... ์๋ต ...) -->
<!-- ์ง๋ฌธ -->
<h2 class="border-bottom py-2" th:text="${question.subject}"></h2>
<div class="card my-3">
<div class="card-body">
<div class="card-text" style="white-space: pre-line;" th:text="${question.content}"></div>
<div class="d-flex justify-content-end">
<div class="badge bg-light text-dark p-2 text-start">
<div class="mb-2">
<span th:if="${question.author != null}" th:text="${question.author.username}"></span>
</div>
<div th:text="${#temporals.format(question.createDate, 'yyyy-MM-dd HH:mm')}"></div>
</div>
</div>
</div>
</div>
<!-- (... ์๋ต ...) -->
๊ธ์ด์ด์ ์์ฑ์ผ์๊ฐ ํจ๊ป ๋ณด์ด๋๋ก ์์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ต๋ณ ๋ถ๋ถ๋ ๊ธ์ด์ด๋ฅผ ๋ค์์ฒ๋ผ ์ถ๊ฐํ์.
ํ์ผ๋ช :
/sbb/src/main/resources/templates/
question_detail.html
<!-- (... ์๋ต ...) -->
<!-- ๋ต๋ณ ๋ฐ๋ณต ์์ -->
<div class="card my-3" th:each="answer : ${question.answerList}">
<div class="card-body">
<div class="card-text" style="white-space: pre-line;" th:text="${answer.content}"></div>
<div class="d-flex justify-content-end">
<div class="badge bg-light text-dark p-2 text-start">
<div class="mb-2">
<span th:if="${answer.author != null}" th:text="${answer.author.username}"></span>
</div>
<div th:text="${#temporals.format(answer.createDate, 'yyyy-MM-dd HH:mm')}"></div>
</div>
</div>
</div>
</div>
<!-- ๋ต๋ณ ๋ฐ๋ณต ๋ -->
<!-- (... ์๋ต ...) -->
๋ง์ฐฌ๊ฐ์ง๋ก ๊ธ์ด์ด์ ์์ฑ์ผ์๊ฐ ํจ๊ป ๋ณด์ด๋๋ก ์์ ํ๋ค.