질문 상세

suhan cho·2022년 7월 7일
0

질문 상세 링크 추가

  • 제목을 클릭했을 때 상세화면이 호출되도록 제목에 링크를 추가
<table xmlns:th="http://www.w3.org/1999/xhtml">
    <thead>
        <tr>
            <th>제목</th>
            <th>작성일시</th>
        </tr>
    </thead>
    <tbody>
        <tr th:each="question : ${questionList}">
            <td>
                <a th:href="@{|/question/detail/${question.id}|}" th:text="${question.subject"></a>
            </td>
            <td th:text="${question.createDate}"></td>
        </tr>
    </tbody>
</table>
  • 제목을 링크로 변경
  • '|' 없이 사용하면 오류 생긴다(문자열 연결할 때 사용)

@PathVaiable

  • 변하는 id값을 얻을 때 사용
  • @RequestMapping(value = "/question/detail/{id}")에서 사용한 id와 @PathVariable("id")의 매개변수 이름은 동일

  • question_detail 템플릿이 없어 500 에러

  • 템플릿에 qeustion_detail 작성

서비스

  • "제목", "내용" 대신 데이터의 실제 제목과 내용 출력
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "entity not found")
public class DataNotFoundException extends RuntimeException {
    private static final long serialVersionUID = 1L;
    public DataNotFoundException(String message) {
        super(message);
    }
}
  • @ResponseStatus
    의해 404대신 (HttpStatus.NOT_FOUND)가 나온다

QuestionController 수정

  • QuestionService의 getQuestion 메서드 호출하여 Question 객체를 템플릿에 전달할 수 있도록 수정
@Controller
public class QuestionController {

    @Autowired
    private final QuestionService questionService;

    public QuestionController(QuestionService questionService) {
        this.questionService = questionService;
    }

    @RequestMapping("/question/list")
    public String list(Model model){
        List<Question> questionList = this.questionService.getList();
        model.addAttribute("questionList", questionList);
        return "question_list";
    }

    @RequestMapping(value = "/question/detail/{id}")
    public String detail(Model model, @PathVariable("id") Integer id) {
        Question question = this.questionService.getQuestion(id);
        model.addAttribute("question", question);
        return "question_detail";
}

profile
안녕하세요

0개의 댓글