Controller 글쓰기 부분
@GetMapping("/qnaBoard/write") //글쓰기 폼으로 이동
public String qnaBoardWriteForm(Model model, HttpServletRequest request, HttpSession session,
@RequestParam(value = "section", defaultValue = "1") int section,
@RequestParam(value = "pageNum", defaultValue = "1") int pageNum) {
AuthInfo ai = (AuthInfo) session.getAttribute("authInfo");
if (ai == null) { //로그인 안했으면 게시글 쓰기 불가
return "accessFail";
}
model.addAttribute("formWrite", new QnaBoardWrite());
int totalCnt = qnaBoardService.pagingCount();
Paging paging = new Paging(section, pageNum);
List<QnaBoard> list = qnaBoardService.selectBoardPaging(paging);
String totalCntJudge = qnaBoardService.totalCntJudge(totalCnt);
model.addAttribute("totalCntJudge", totalCntJudge);
model.addAttribute("totalCnt", totalCnt);
model.addAttribute("section", section);
model.addAttribute("pageNum", pageNum);
model.addAttribute("boardList", list);
return "qnaBoard/write";
}
@RequestMapping(value = "/qnaBoard/formwrite", method = RequestMethod.GET) //폼에서 입력받은 내용 디비에 저장
public String qnaBoardWrite(QnaBoardWrite qnaBoardWrite, Model model, HttpSession session,
@RequestParam(value = "section", defaultValue = "1") int section,
@RequestParam(value = "pageNum", defaultValue = "1") int pageNum) {
AuthInfo ai = (AuthInfo) session.getAttribute("authInfo");
qnaBoardWrite.setMno(ai.getNo()); // 현재 로그인된 정보로 글쓰기한 멤버넘버 저장
model.addAttribute("formWrite");
qnaBoardService.boardWrite(qnaBoardWrite);
int totalCnt = qnaBoardService.pagingCount();
Paging paging = new Paging(section, pageNum);
List<QnaBoard> list = qnaBoardService.selectBoardPaging(paging);
String totalCntJudge = qnaBoardService.totalCntJudge(totalCnt);
model.addAttribute("totalCntJudge", totalCntJudge);
model.addAttribute("totalCnt", totalCnt);
model.addAttribute("section", section);
model.addAttribute("pageNum", pageNum);
model.addAttribute("boardList", list);
return "qnaBoard/list";
}
Controller 검색부분 (keyword 입력후 submit시)
@RequestMapping(value="/qnaBoard/search")
public String qnaBoardSearch(@RequestParam(value="keyword", required = false) String keyword, Model model,
@RequestParam(value = "section", defaultValue = "1") int section,
@RequestParam(value = "pageNum", defaultValue = "1") int pageNum) {
Paging paging = new Paging(keyword, section, pageNum);
int totalCnt = qnaBoardService.pagingCountSearch(paging);
List<QnaBoard> list = qnaBoardService.selectSearchPaging(paging);
String totalCntJudge = qnaBoardService.totalCntJudge(totalCnt);
model.addAttribute("totalCntJudge", totalCntJudge);
model.addAttribute("totalCnt", totalCnt);
model.addAttribute("section", section);
model.addAttribute("pageNum", pageNum);
model.addAttribute("boardList", list);
model.addAttribute("keyword", keyword);
return "qnaBoard/list";
}
Mapper - QnaBoardMapper
@Mapper
public interface QnaBoardMapper {
void insertBoard(QnaBoard qnaBoard);
void deleteBoard(Integer qnaBoardNum);
void updateBoard(QnaBoard qnaBoard);
Integer pagingCountSearch(Paging paging);
List<QnaBoard> selectSearchPaging(Paging paging);
}
Service - QnaBoardService
@Service
@RequiredArgsConstructor
public class QnaBoardService {
@Autowired
QnaBoardMapper qnaBoardMapper;
@Transactional
public void boardWrite(QnaBoardWrite br) {
QnaBoard newboard = new QnaBoard(0, br.getMno(), br.getTitle(), br.getContent(), null);
qnaBoardMapper.insertBoard(newboard);
}
@Transactional
public void boardDelete(Integer qnaBoardNum) {
qnaBoardMapper.deleteBoard(qnaBoardNum);
}
@Transactional
public void boardEdit(QnaBoardWrite br) {
QnaBoard board = qnaBoardMapper.selectView(br.getBno());
board.setQnaBoardTitle(br.getTitle());
board.setQnaBoardContent(br.getContent());
qnaBoardMapper.updateBoard(board);
}
@Transactional
public List<QnaBoard> selectSearchPaging(Paging paging) {
List<QnaBoard> list = qnaBoardMapper.selectSearchPaging(paging);
return list;
}
}
Templates - qnaBoard - write.html
<div class="cotainer">
<div class="row justify-content-center">
<div class="col-md-6 table-responsive">
<form action="formwrite" commandName="formWrite" method="GET">
<table class="table table-sm text-center" >
<tr>
<td style="width:20%">제목</td>
<td><input type="text" name="title" id="fm" class="form-control form-control-sm"></td>
</tr>
<tr>
<td colspan="2"><br>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="10" name="content" placeholder="질문 내용을 입력해주세요. 답변 내용은 질문자와 관리자만 열람할수 있습니다."></textarea></td>
</tr>
</table>
<div style="text-align: right">
<input type="button" value="목록" onclick="location.href='/qnaBoard'" class="btn btn-primary btn-sm" style="background-color: #865439; border: 0;">
<input type="reset" value="다시쓰기" class="btn btn-primary btn-sm" style="background-color: #865439; border: 0;">
<input type="submit" value="완료" class="btn btn-primary btn-sm" style="background-color: #865439; border: 0;">
</div>
</form>
</div>
Templates - qnaBoard - list.html (키워드 있을경우 페이징처리)
<div th:if="${keyword!=null}" style="text-align: center"> <!-- 검색 페이징 처리 -->
<th:block th:switch="${totalCntJudge}">
<th:block th:case="101">
<th:block th:if="${(section)*100<totalCnt}">
<th:block th:each="page : ${#numbers.sequence(1,10,1)}">
<th:block th:if="${section >1 && page==1}">
<a th:href="@{/qnaBoard/search(section=${section}-1, pageNum=10, keyword=${keyword})}"> << </a>
</th:block>
<a th:href="@{/qnaBoard/search(section=${section}, pageNum=${page}, keyword=${keyword})}"><span th:text="${((section)-1)*10+page}"></span></a>
<th:block th:if="${page==10}">
<a th:href="@{/qnaBoard/search(section=${section+1}, pageNum=1, keyword=${keyword})}"> >> </a>
</th:block>
</th:block>
</th:block>
<th:block th:if="${(section)*100>totalCnt}">
<th:block th:each="page : ${#numbers.sequence(1, (((totalCnt+9)-((section)-1)*100)/10) ,1)}">
<th:block th:if="${section >1 && page==1}">
<a th:href="@{/qnaBoard/search(section=${(section)-1}, pageNum=10, keyword=${keyword})}"> << </a>
</th:block>
<a th:href="@{/qnaBoard/search(section=${section}, pageNum=${page}, keyword=${keyword})}"><span th:text="${((section)-1)*10+page}"></span></a>
</th:block>
</th:block>
<th:block th:if="${(section)*100==totalCnt}">
<th:block th:each="page : ${#numbers.sequence(1, 10 ,1)}">
<th:block th:if="${section >1 && page==1}">
<a th:href="@{/qnaBoard/search(section=${(section)-1}, pageNum=10, keyword=${keyword})}"> << </a>
</th:block>
<a th:href="@{/qnaBoard/search(section=${section}, pageNum=${page}, keyword=${keyword})}"><span th:text="${((section)-1)*10+page}"></span></a>
</th:block>
</th:block>
</th:block>
<th:block th:case="100">
<th:block th:each="page : ${#numbers.sequence(1,10,1)}">
<a th:href="@{/qnaBoard/search(section=${section}, pageNum=${page}, keyword=${keyword})}"><span th:text="${page}"></span></a>
</th:block>
</th:block>
<th:block th:case="99">
<th:block th:each="page : ${#numbers.sequence(1,((totalCnt+9)/10),1)}">
<a th:href="@{/qnaBoard/search(section=${section}, pageNum=${page}, keyword=${keyword})}"><span th:text="${page}"></span></a>
</th:block>
</th:block>
</th:block>
</div>
728x90
'Portfolio > KYP COFFEE' 카테고리의 다른 글
Spring/Gradle/Thymeleaf 이용한 게시판 빌드 (검색, 페이징) [1] (0) | 2022.06.04 |
---|---|
KYP COFFEE PROJECT 시연 (0) | 2022.05.30 |
전체 DB구조 / 회원테이블 DB 생성 (0) | 2022.05.19 |
국세청 사업자등록번호 API 활용하기(Ajax) (0) | 2022.05.16 |
Spring/Gradle/Thymeleaf 이용한 로그인페이지 구현 +패스워드 찾기 (0) | 2022.05.16 |