게으른 완벽주의자의 개발자 도전기
[board] 게시글 등록하기 (session 데이터, validation 처리) 본문
로그인 한 회원에게만 글쓰기 버튼이 보이도록 설정하고 게시글 작성 후 등록하기
로그인 한 유저만 보이는 글쓰기 버튼 클릭
<div class="row" text-center>
<th:block th:if="${session.loginInfo != null}">
<button type="button" class="btn btn-outline-info" th:onclick="|location.href='@{/board/writeBoard}'|">글쓰기</button>
</th:block>
</div>
controller
글쓰기
@GetMapping("/writeBoard")
public String writeBoard(BoardVO boardVO) {
return "content/reg_board";
}
1. mapper / service
<insert id="regBoard">
INSERT INTO BOARD (
BOARD_NUM
, TITLE
, CONTENT
, MEMBER_ID
) VALUES(
(SELECT NVL(MAX(BOARD_NUM),0)+1 FROM BOARD)
, #{title}
, #{content}
, #{memberId}
)
</insert>
게시글 등록
@Override
public void regBoard(BoardVO board) {
sqlSession.insert("boardMapper.regBoard", board);
}
2. BoardVO
@Getter
@Setter
@ToString
public class BoardVO {
private int boardNum;
@NotBlank(message = "제목을 입력하세요")
private String title;
@NotBlank(message = "내용을 입력하세요")
private String content;
private String memberId;
private String createDate;
}
3. controller
게시글 등록
@PostMapping("/regBoard")
public String regBoard(@Valid BoardVO boardVO, BindingResult bindingResult, Model model, HttpSession session) {
에러발생
if(bindingResult.hasErrors()) {
return "content/reg_board";
}
글 등록
else {
★글쓰기에서 데이터로 memberId를 가져오지 못하기 때문에 session데이터 가져오기
MemberVO loginInfo = (MemberVO)session.getAttribute("loginInfo");
★ boardVO에 setMemberId 데이터 넣기
boardVO.setMemberId(loginInfo.getMemberId());
boardService.regBoard(boardVO);
return"content/reg_alert";
}
}
4. reg_board.html
<div layout:fragment="content">
<form th:action="@{/board/regBoard}" method="post" th:object="${boardVO}">
<div class="row justify-content-center">
<div class="col-6">
<div class="mb-3">
<label for="formGroupExampleInput" class="form-label">제목</label>
<input type="text" class="form-control" id="formGroupExampleInput"
th:field="*{title}">
<div class="hasError" th:if="${#fields.hasErrors('title')}"
th:errors="*{title}"></div>
<label for="formGroupExampleInput" class="form-label">작성자</label>
<input type="text" class="form-control" id="formGroupExampleInput"
readonly th:value="${session.loginInfo.memberName}">
</div>
<label for="formGroupExampleInput" class="form-label">내용</label>
<div class="form-floating">
<textarea class="form-control" placeholder="내용을 입력하세요"
id="floatingTextarea2" style="height: 300px" th:field="*{content}"></textarea>
<div class="hasError" th:if="${#fields.hasErrors('content')}"
th:errors="*{content}"></div>
</div>
<div class="row">
<div class="col text-center">
<button type="submit" class="btn btn-outline-info">등록하기</button>
</div>
</div>
</div>
</div>
</form>
</div>
4. reg_alert.html
<div layout:fragment ="content">
<script type="text/javascript">
alert('게시글이 등록되었습니다.')
location.href = '/board/list';
</script>
</div>
'Spring Boot' 카테고리의 다른 글
[board] 게시글 상세페이지 (th:object, th:field) (0) | 2022.09.19 |
---|---|
[board] 게시글 목록 (0) | 2022.09.19 |
[shop] 모달을 사용하여 로그인하기 (ajax 사용, ajax 사용 X) (0) | 2022.09.18 |
[shop] modal 사용하여 회원가입 (주소 입력하기) (0) | 2022.09.18 |
[board]validation을 이용하여 회원가입하기 (0) | 2022.09.18 |