본 포스팅의 예제는 STS 또는 Eclipse를 사용하지 않고 Intellij를 통해 구현하고 있습니다.
그래서 기존의 STS(Spring Tool Studio)에서 생성된 Spring 프로젝트의 스프링 관련 설정 파일명과
프로젝트 구조가 약간 다를 수 있습니다.Intellij 스프링 mvc 프로젝트 생성 포스팅을 참고해주시면 감사하겠습니다.
Spring-MVC 기본 개념 및 테스트 예제 관련 포스팅 링크
순서 | 포스팅 제목 |
1 | Intellij에서 Spring MVC Project 생성하기 |
2 | Spring MVC - MariaDB 연결테스트 |
3 | Spring MVC - Mybatis 설정 및 테스트 |
4 | SpringMVC 구조 |
5 | SpringMVC + Mybatis |
6 | Spring MVC Controller 작성 연습 |
7 | Spring Interceptor |
Spring-MVC 게시판 예제 이전 포스팅 링크
1. 게시글 작성 구현
1.1 게시글 작성 영속 계층 (Persistence Tire) 구현
src/기본패키지/board/persistence 패키지 안에 BoardDAO 인터페이스와 BoardDAOImpl 클래스 안에 아래와 같이 내용을 추가 해주세요.
// 게시글 카테고리 목록
public List<CategoryVo> getCategoryList();
// 게시글 작성
public void insertPosting(BoardVo param);
// 카테고리 목록
@Override
@LogException
public List<CategoryVo> getCategoryList() {
return sqlSession.selectList(NAMESPACE + ".getCategoryList");
}
// 게시글 작성
@Override
@LogException
public void insertPosting(BoardVo param) {
sqlSession.insert(NAMESPACE + ".insertPosting", param);
}
resources/board/BoardSQLMapper.xml 파일에 아래와 같이 내용을 추가 해주세요.
<!-- 카테고리 목록 -->
<select id="getCategoryList" resultType="CategoryVo">
select * from eden_board_category
</select>
<!-- 게시글 작성 -->
<insert id="insertPosting">
insert into eden_board (board_no, user_no, category_no, board_title, board_content)
values (
eden_board_seq.nextval,
#{user_no},
#{category_no},
#{board_title},
#{board_content}
)
</insert>
1.2 게시글 작성 비지니스 계층 (Business Tier) 구현
src/기본패키지/board/service 패키지 안에 BoardService 인터페이스와 BoardServiceImpl 클래스 파일에 아래와 같이 내용을 추가 작성해주세요.
// 게시글 카테고리 목록
public List<CategoryVo> getCategoryList();
// 게시글 작성
public void insertPosting(BoardVo param);
// 게시글 카테고리 목록
@Override
@LogException
public List<CategoryVo> getCategoryList() {
return boardDAO.getCategoryList();
}
// 게시글 작성
@Override
@LogException
public void insertPosting(BoardVo param) {
boardDAO.insertPosting(param);
}
1.3 게시글 작성 컨트롤러 구현
src/기본패키지/board/controller 패키지안에 BoardController 클래스와 RestBoardController 클래스 안에 아래와 같이 내용을 추가 작성해주세요.
@PostMapping(value = "writePosting")
@LogException
public String writePosting(@RequestParam(value = "category_no", defaultValue = "0") int category_no, @ModelAttribute("boardVo") BoardVo param, Model model) {
model.addAttribute("category_no", category_no);
model.addAttribute("list", boardService.getCategoryList());
return "board/writePosting";
}
@RestController
@RequestMapping("/board/*")
public class RestBoardController {
private static final HashMap<String, Object> data = new HashMap<String, Object>();
@Autowired
BoardService boardService;
// 게시글 작성 프로시저
@PostMapping(value = "writePostingProcess")
@LogException
public HashMap<String, Object> writePostingProcess(@Valid BoardVo param, BindingResult result, HttpSession session) {
if (result.hasErrors()) {
data.put("result", "error");
}
UserVo sessionUser = (UserVo) session.getAttribute("sessionUser");
param.setUser_no(sessionUser.getUser_no());
boardService.insertPosting(param);
data.put("result", "success");
return data;
}
}
1.4 게시글 작성 JSP 페이지 작성
web-inf/views/board 패키지 안에 writePosting.jsp 파일 생성 후 아래와 같이 내용을 작성 해주세요.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="../include/head.jsp" %>
<%@ include file="../include/user_menu.jsp" %>
<html>
<body class="hold-transition skin-green-light sidebar-mini" oncopy="return false" oncut="return false"
onpaste="return false">
<div class="wrapper">
<%@ include file="../include/top_menu.jsp" %>
<%@ include file="../include/left_menu.jsp" %>
<div class="content-wrapper">
<section class="content container-fluid">
<div class="col-lg-12">
<form:form action="${path}/board/writePostingProcess" modelAttribute="boardVo" id="writeForm"
method="post">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">게시글 작성</h3>
</div>
</div>
<div class="box-body">
<div class="row mt-1">
<div class="col-lg-5">
<label for="categoryList">카테고리</label>
</div>
</div>
<div class="row mt-1">
<div class="col-lg-5">
<select path="category_no" class="form-control" id="categoryList">
<c:forEach items="${list}" var="category">
<c:choose>
<c:when test="${category_no == category.category_no}">
<option value="${category.category_no}" selected>
${category.category_name}
</option>
</c:when>
<c:otherwise>
<option value="${category.category_no}">
${category.category_name}
</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
<div class="row mt-1">
<div class="col-lg-5">
<label for="board_title">게시글 제목</label>
</div>
</div>
<div class="row mt-1">
<div class="col-lg-5">
<form:input type="text" class="form-control" path="board_title" id="board_title"
placeholder="제목을 입력해주세요"/>
</div>
</div>
<div class="row mt-1">
<div class="col my-auto"><form:errors path="board_title" id="error_message"/></div>
</div>
<div class="row mt-1">
<div class="col-lg-5">
<label for="board_content">게시글 내용</label>
</div>
</div>
<div class="row mt-1">
<div class="col-lg-5">
<form:textarea path="board_content" class="form-control" id="board_content" rows="30"
placeholder="내용을 입력해주세요" style="resize: none;"/>
</div>
</div>
<div class="row mt-1">
<div class="col my-auto"><form:errors path="board_content" id="error_message"/></div>
</div>
<div class="row mt-1">
<div class="col-lg-5">
<label for="write">게시글 작성자</label>
</div>
</div>
<div class="row-mt-1">
<div class="col-lg-5">
<input type="text" id="write" class="form-control" value="${sessionUser.user_nickname}"
disabled>
</div>
</div>
</div>
<div class="box-footer">
<div class="pull-right">
<a href="#" onclick="postingList(${data.category_no});" class="btn btn-primary"><i
class="fa fa-list"></i> 목록</a>
<button type="reset" class="btn btn-warning"><i class="fa fa-reply"></i> 초기화</button>
<button type="button" id="writePostingButton" class="btn btn-success"><i
class="fa fa-save"></i> 저장
</button>
</div>
</div>
</form:form>
</div>
</section>
</div>
<%@ include file="../include/footer.jsp" %>
</div>
<%@ include file="../include/plugin_js.jsp" %>
</body>
</html>
1.5 게시글 작성 JavaScript 작성
webapp/resources/dist/js/board 패키지 안에 relatedBulletin.js 파일에 아래와 같이 내용을 추가 해주세요.
function writePosting(category_no) {
const form = $("form[name='writeForm']");
$("#category").attr("value", category_no);
form.attr("action", "../board/writePosting");
form.attr("method", "post");
form.submit();
}
window.addEventListener("DOMContentLoaded", function () {
/* 게시글 작성 */
$("#writePostingButton").click(function () {
$.ajax({
type: "post",
url: "../board/writePostingProcess",
data: {
category_no: $("#categoryList").val(),
board_title: $("#board_title").val(),
board_content: $("#board_content").val()
},
dataType: "json",
success: function (data) {
if (data.result == "error") {
location.reload();
} else {
alert("게시글 작성에 성공 하였습니다.");
postingList($("#categoryList").val());
}
}
});
});
})
1.6 게시글 작성 페이지 확인
2. 정리
이번에는 게시글 작성 기능을 구현 해보았습니다. 다음에는 게시글 상세보기 기능을 구현 해보도록 하겠습니다.
'스프링 프레임워크 > 스프링 MVC' 카테고리의 다른 글
# Spring MVC 게시판 예제 17 : 게시글 수정 및 삭제 (0) | 2023.03.13 |
---|---|
# Spring MVC 게시판 예제 16 : 게시글 상세보기 (0) | 2023.03.10 |
# Spring MVC 게시판 예제 14 : 게시글 목록 출력 (0) | 2023.03.07 |
# Spring MVC 게시판 예제 13 : 자동 로그인 기능 구현 (0) | 2023.03.07 |
# Spring MVC 게시판 예제 12 : 계정 복구 (0) | 2023.03.05 |
댓글