본문 바로가기

Spring

[Spring]기능 - 앵커(anchor)

스프링 부트에는 자신이 원하는 답변을 작성하고, 다시 스크롤을 내리지 않아도 자동으로 스크롤이 내려가는 기능을 만들 수 있다.

 

ajax같은 비동기 통신으로도 가능하지만, 더욱 쉽게 원하는 위치로 이동시킬 수 있다.

 

만들어보자.

 

1. 답변 Anchor 추가

바로 이동할 수 있도록 a 엘리먼트를 넣는다.

<a th:id="|answer_${answer.id}|"></a>

여기서 th:id="" th:each 구문에서 id를 다르게 구분하는 전략으로 answer의 id값을 넣어주었다.

 

이를 통해 answer.id 부분으로 바로 이동할 수 있는 것이다.

 

2. AnswerController 수정

답변을 수정하고 다시 이동할 때 구분했던 id값으로 바로 이동할 수 있도록 위 답변 anchor을 이용했다.

Answer answer = this.answerService.create(question, 
                answerForm.getContent(), siteUser);
return String.format("redirect:/question/detail/%s#answer_%s", 
        answer.getQuestion().getId(), answer.getId());

여기서 redirect 할 URL의 마지막 부분에서 %question.id#answer_answer.id를 사용했는데, 이 question.id의 질문에서 제작한 answer의 id로 스크롤 이동될 수 있도록 만든 것이다.

(#을 붙인 이유는 id값이기 때문에 붙엿다.)

 

답변을 생성할 때 내용 저장 후 Answer 객체를 통해 Answer의 id값을 받아와야 한다.

그래야 redirect 할 때 answer의 유일한 id값으로 스크롤 될 수 있다.

 

3. AnswerService 수정

AnswerController에서 Answer 객체를 create 할 때 반환되는 값으로 가져오라고 했다. 그러면 AnswerService의 create 메서드의 반환값을 교체해주면 된다.

public Answer create(Question question, String content, SiteUser author) {
    Answer answer = new Answer();
    answer.setContent(content);
    answer.setCreateDate(LocalDateTime.now());
    answer.setQuestion(question);
    answer.setAuthor(author);
    this.answerRepository.save(answer);
    return answer;
}

그러면 새로 만들어지는 answer의 객체를 가져올 수 있다.

 

 

'Spring' 카테고리의 다른 글

[Spring]QueryDSL 적용하기  (0) 2022.08.29
[Spring]기능 - 검색  (0) 2022.08.25
[Spring]기능 - 추천 기능  (0) 2022.08.23
[Spring]기능 - 질문 수정 및 삭제  (0) 2022.08.22
[Spring]기능 - 작성자 출력하기  (0) 2022.08.22