승띵이의 개발일지
[Spring Boot] 게시판 만들기 2 (게시판 별 구분) 본문
게시판 만들기 2탄
게시판 만들기 2탄에서는 게시판 만들기 1에서 만들었던 게시판을 게시판의 종류에 따라 구분하는 작업을 수행해보려고 한다.
게시판 만들기 1 : https://myung-it.tistory.com/39
[Spring Boot] 게시판 만들기 1(feat. CKEditor5)
게시판 만들기 오늘은 페브리즈 페이지에 게시판 기능을 구현해 보려고 한다. 게시판은 크게 공지사항, 자유게시판, Q&A 3개의 게시판으로 나누어 구현해 보려고 한다. 오늘도 고고고~ CKEditor CKEdi
myung-it.tistory.com
본 포스팅에서 구현하고자 하는 작업의 목표는 localhost:8080/bbs/write에서 get 방식으로 접근하였을 때 bid 값이 boards 테이블에 존재하는 id의 값인지 확인한 후 해당 값이 존재한다면 접속, 아닐 시 '존재하지 않는 게시판입니다' 라는 alert가 팝업되게 하는 것을 목적으로 한다.
또한, 해당 bid 값에 따라 해당 페이지의 타이틀을 공지사항, 자유게시판, Q&A에 따라 '공지사항-글쓰기', 자유게시판-글쓰기', Q&A-글쓰기'로 구분하는 작업까지 수행하려고 한다.
그럼 시작
결과
BbsMapper.xml
<select id="selectBoardById" resultType="com.smchoi.studymemberbbs.entities.bbs.BoardsEntity">
select `id` as 'id',
`text` as 'text'
from study_bbs.boards
where binary `id` = #{id}
limit 1
</select>
study_bbs.boards를 select 하기 위한 Mapper 파일을 생성해주었다.
해당 쿼리문은 id로 구분을 하기 위해 where 절에 id = #{id} 조건을 걸어주었다.
IBbsMapper
@Mapper
public interface IBbsMapper {
BoardsEntity selectBoardById(@Param(value = "id") String id);
}
Mapper xml 파일에서 만든 select 문을 사용하기 위한 인터페이스를 생성하였다.
해당 인터페이스에 BoardEntity 타입의 selectBoardById 객체를 생성, 매개변수를@Param(value="id) String id로 설정하여 id 값을 매개변수로 가지도록 하였다.
또한, 해당 인터페이스에 @Mapper 어노테이션을 걸어줌으로써 Service 클래스에서 사용할 수 있도록 조치하였다.
BbsService
@Service(value = "com.smchoi.studymemberbbs.services.BbsController")
public class BbsService {
private final IBbsMapper bbsMapper;
@Autowired
public BbsService(IBbsMapper bbsMapper) {
this.bbsMapper = bbsMapper;
}
public BoardsEntity getBoard(String id){
return this.bbsMapper.selectBoardById(id);
}
}
BbsService 클래스를 서비스 형태로 생성, private final IBbsMapper bbsMapper로 선언 후 생성자를 생성하여 BbsService(IBbsMapper bbsMapper) {this.bbsMapper = bbsMapper} 에 @Autowired 형태로 만들어주었다.
BoardEntity getBoard(String id)를 생성하여 bbsMapper.selectBoardById(id)를 반환해 준다.
본 작업은 String id 값이 DB 내에 존재 유무를 확인할 수 있는 작업이다.
BbsController
@Controller(value = "com.smchoi.studymemberbbs.controllers.BbsController")
@RequestMapping(value = "/bbs")
public class BbsController {
private final BbsService bbsService;
@Autowired
public BbsController(BbsService bbsService) {
this.bbsService = bbsService;
}
@RequestMapping(value = "write",
method = RequestMethod.GET,
produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView getWrite(@SessionAttribute(value = "user", required = false) UserEntity user,
@RequestParam(value = "bid", required = false) String bid) {
// login 에서 setAttribute 값을 가져옴. 세션에서 가져왔다는 뜻
// required 가 true 이면 값이 무조건 존재하여야하지만(없으면 400 오류) false 인 경우 값이 없어도 null 값으로 처리가 된다.
ModelAndView modelAndView;
if (user == null) { // 로그인 확인 작업. 해당 user 는 Session 에서 가져온 값이다.
modelAndView = new ModelAndView("redirect:/member/login");
} else {
modelAndView = new ModelAndView("bbs/write");
if(bid == null || this.bbsService.getBoard(bid) == null) {
modelAndView.addObject("result", CommonResult.FAILURE.name());
} else {
modelAndView.addObject("result", CommonResult.SUCCESS.name());
modelAndView.addObject("bid", this.bbsService.getBoard(bid).getText());
}
}
return modelAndView;
}
}
기존의 BbsController에서 추가적인 구문을 기술하였다.
user가 로그인 된 상태에서 만일 bid 값이 null이거나 this.bsService.getBoard(bid) 값이 null이라면 CommonResult.FAILURE의 name()을 modelAndView.addObject로 추가, 아닐 시 CommonResult.SUCCESS를 modelAndView.addObject로 추가해 주었다.
또한, 해당 this.bbsService.getBoard(bid).getText() 값을 "bid" 라는 이름으로 modelAndView에 추가해 주었다.
해당 작업은 현재 주소의 bid 값이 무엇인지에 따라 게시판의 이름을 구분하기 위해 하는 작업이다.
write.html
<script th:if="${result.equals('FAILURE')}">
alert('존재하지않는 게시판 입니다.');
if(window.history.length>1){
window.history.back();
}else{
window.close();
}
</script>
write.html 파일에 <script> 태그를 추가하여 js 기능을 추가해 주었다.
<script> 태그에 th:if="${result.eqals('FAILURE)}" 조건절을 추가해주어 만약 (modelAndView의) result가 FAILURE 이라면(bid == null || this.bbsService.getBoard(bid) == null) '존재하지 않는 게시판입니다' 라는 alert를 띄우도록 구현하였다.
그리고 만일 window.history.length가 1보다 크다면(이 전 페이지 기록이 존재한다면) 그 전 페이지로 돌아가도록, 아닐 시 윈도우 창이 꺼지도록 해 주었다.
<h1 class="title" rel="title" th:text="${bid + '-글쓰기'}"></h1>
title에 th:text="${ bid+ '-글쓰기' }" 로 설정해주어 해당 bid의 text + -'글쓰기' 형태로 title이 표시되도록 하였다.
'언어 > Spring Boot' 카테고리의 다른 글
[Spring Boot] 게시글 확인 (4) | 2022.11.21 |
---|---|
[Spring Boot] 게시글 작성 (DB INSERT) (2) | 2022.11.20 |
[Spring Boot] 게시판 만들기 1(feat. CKEditor5) (1) | 2022.11.16 |
[Spring Boot] 로그인 2 (feat. Cookie, Session ) (0) | 2022.11.15 |
[Spring Boot] 로그인 1 (4) | 2022.11.14 |