안녕하세요!
게시판 만들기를 하고 있습니다 아까도 비슷한 문제로 문의 남겼었는데
그건 해결이 됐고 또 새로운 문제가 생겨서요ㅠㅠ
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
<title>Elements - Editorial by HTML5 UP</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="./resources/css/main.css" />
<style>
#sidebar{
background-color : #ffd8f0;
}
</style>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<div id="main">
<div class="inner">
<hr />
<div>
<%@include file="nav.jsp" %>
</div>
<hr />
<section id="container">
<form role="form" method="get">
<table>
<tr><th>번호</th><th>제목</th><th>작성자</th><th>등록일</th></tr>
<c:forEach items="${list}" var = "list">
<tr>
<td><c:out value="${list.bno}" /></td>
<td>
<a href="/board/readView?bno=${list.bno}&
page=${scri.page}&perPageNum=${scri.perPageNum}&
searchType=${scri.searchType}&
keyword=${scri.keyword}"><c:out value="${list.title}" /></a>
</td>
<td><c:out value="${list.writer}" /></td>
<td><fmt:formatDate value="${list.regdate}" pattern="yyyy-MM-dd"/></td>
</tr>
</c:forEach>
</table>
<div class="search row">
<div class="col-xs-2 col-sm-2">
<select name="searchType" class="form-control">
<option value="n"<c:out value="${scri.searchType == null ? 'selected' : ''}"/>>-----</option>
<option value="t"<c:out value="${scri.searchType eq 't' ? 'selected' : ''}"/>>제목</option>
<option value="c"<c:out value="${scri.searchType eq 'c' ? 'selected' : ''}"/>>내용</option>
<option value="w"<c:out value="${scri.searchType eq 'w' ? 'selected' : ''}"/>>작성자</option>
<option value="tc"<c:out value="${scri.searchType eq 'tc' ? 'selected' : ''}"/>>제목+내용</option>
</select>
</div>
<div class="col-xs-10 col-sm-10">
<div class="input-group">
<input type="text" name="keyword" id="keywordInput" value="${scri.keyword}" class="form-control"/>
<span class="input-group-btn">
<button id="searchBtn" type="button" class="btn btn-default">검색</button>
</span>
</div>
</div>
<script>
$(function(){
$('#searchBtn').click(function() {
self.location = "list" + '${pageMaker.makeQuery(1)}' + "&searchType=" + $("select option:selected").val() + "&keyword=" + encodeURIComponent($('#keywordInput').val());
});
});
</script>
</div>
<ul>
<c:if test="${pageMaker.prev}">
<li><a href="list${pageMaker.makeSearch(pageMaker.startPage - 1)}">이전</a></li>
</c:if>
<c:forEach begin="${pageMaker.startPage}" end="${pageMaker.endPage}" var="idx">
<li><a href="list${pageMaker.makeSearch(idx)}">${idx}</a></li>
</c:forEach>
<c:if test="${pageMaker.next && pageMaker.endPage > 0}">
<li><a href="list${pageMaker.makeSearch(pageMaker.endPage + 1)}">다음</a></li>
</c:if>
</ul>
</form>
</section>
<hr />
</div>
</body>
</html>
nav.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<style type="text/css">
li {list-style: none; display:inline; padding: 6px;}
</style>
<ul>
<li><a href="/list.do">목록</a></li>
<li><a href="/writeView.do">글 작성</a></li>
<li><a href="">로그인</a></li>
</ul>
BoardController.jsp
package lab.spring.mvc.controller;
import java.util.List;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import lab.spring.mvc.service.BoardService;
import lab.spring.mvc.service.ReplyService;
import lab.spring.mvc.model.BoardVO;
import lab.spring.mvc.model.Criteria;
import lab.spring.mvc.model.PageMaker;
import lab.spring.mvc.model.ReplyVO;
import lab.spring.mvc.model.SearchCriteria;
@Controller
public class BoardController {
private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
@Inject
BoardService service;
@Inject
ReplyService replyService;
// 게시판 글 작성 화면
@RequestMapping(value = "/writeView.do", method = RequestMethod.GET)
public void writeView() throws Exception{
logger.info("writeView");
}
// 게시판 글 작성
@RequestMapping(value = "/write.do", method = RequestMethod.POST)
public String write(BoardVO boardVO) throws Exception{
logger.info("write");
service.write(boardVO);
return "redirect:/board/list";
}
// 게시판 목록 조회
@RequestMapping(value = "/list.do", method = RequestMethod.GET)
public String list(Model model, @ModelAttribute("scri") SearchCriteria scri) throws Exception{
logger.info("list");
model.addAttribute("list", service.list(scri));
PageMaker pageMaker = new PageMaker();
pageMaker.setCri(scri);
pageMaker.setTotalCount(service.listCount(scri));
model.addAttribute("pageMaker", pageMaker);
return "board/list";
}
// 게시판 조회
@RequestMapping(value = "/readView.do", method = RequestMethod.GET)
public String read(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, Model model) throws Exception{
logger.info("read");
model.addAttribute("read", service.read(boardVO.getBno()));
model.addAttribute("scri", scri);
List<ReplyVO> replyList = replyService.readReply(boardVO.getBno());
model.addAttribute("replyList", replyList);
return "board/readView";
}
// 게시판 수정뷰
@RequestMapping(value = "/updateView.do", method = RequestMethod.GET)
public String updateView(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, Model model) throws Exception{
logger.info("updateView");
model.addAttribute("update", service.read(boardVO.getBno()));
model.addAttribute("scri", scri);
return "board/updateView";
}
// 게시판 수정
@RequestMapping(value = "/update.do", method = RequestMethod.POST)
public String update(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, RedirectAttributes rttr) throws Exception{
logger.info("update");
service.update(boardVO);
rttr.addAttribute("page", scri.getPage());
rttr.addAttribute("perPageNum", scri.getPerPageNum());
rttr.addAttribute("searchType", scri.getSearchType());
rttr.addAttribute("keyword", scri.getKeyword());
return "redirect:/list.do";
}
// 게시판 삭제
@RequestMapping(value = "/delete.do", method = RequestMethod.POST)
public String delete(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, RedirectAttributes rttr) throws Exception{
logger.info("delete");
service.delete(boardVO.getBno());
rttr.addAttribute("page", scri.getPage());
rttr.addAttribute("perPageNum", scri.getPerPageNum());
rttr.addAttribute("searchType", scri.getSearchType());
rttr.addAttribute("keyword", scri.getKeyword());
return "redirect:/board/list";
}
//댓글 작성
@RequestMapping(value="/replyWrite.do", method = RequestMethod.POST)
public String replyWrite(ReplyVO vo, SearchCriteria scri, RedirectAttributes rttr) throws Exception {
logger.info("reply Write");
replyService.writeReply(vo);
rttr.addAttribute("bno", vo.getBno());
rttr.addAttribute("page", scri.getPage());
rttr.addAttribute("perPageNum", scri.getPerPageNum());
rttr.addAttribute("searchType", scri.getSearchType());
rttr.addAttribute("keyword", scri.getKeyword());
return "redirect:/board/readView";
}
//댓글 수정 GET
@RequestMapping(value="/replyUpdateView.do", method = RequestMethod.GET)
public String replyUpdateView(ReplyVO vo, SearchCriteria scri, Model model) throws Exception {
logger.info("reply Write");
model.addAttribute("replyUpdate", replyService.selectReply(vo.getRno()));
model.addAttribute("scri", scri);
return "board/replyUpdateView";
}
//댓글 수정 POST
@RequestMapping(value="/replyUpdate.do", method = RequestMethod.POST)
public String replyUpdate(ReplyVO vo, SearchCriteria scri, RedirectAttributes rttr) throws Exception {
logger.info("reply Write");
replyService.updateReply(vo);
rttr.addAttribute("bno", vo.getBno());
rttr.addAttribute("page", scri.getPage());
rttr.addAttribute("perPageNum", scri.getPerPageNum());
rttr.addAttribute("searchType", scri.getSearchType());
rttr.addAttribute("keyword", scri.getKeyword());
return "redirect:/board/readView";
}
//댓글 삭제 GET
@RequestMapping(value="/replyDeleteView.do", method = RequestMethod.GET)
public String replyDeleteView(ReplyVO vo, SearchCriteria scri, Model model) throws Exception {
logger.info("reply Write");
model.addAttribute("replyDelete", replyService.selectReply(vo.getRno()));
model.addAttribute("scri", scri);
return "board/replyDeleteView";
}
//댓글 삭제
@RequestMapping(value="/replyDelete.do", method = RequestMethod.POST)
public String replyDelete(ReplyVO vo, SearchCriteria scri, RedirectAttributes rttr) throws Exception {
logger.info("reply Write");
replyService.deleteReply(vo);
rttr.addAttribute("bno", vo.getBno());
rttr.addAttribute("page", scri.getPage());
rttr.addAttribute("perPageNum", scri.getPerPageNum());
rttr.addAttribute("searchType", scri.getSearchType());
rttr.addAttribute("keyword", scri.getKeyword());
return "redirect:/board/readView";
}
}
writeView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<title>게시판</title>
</head>
<script type="text/javascript">
$(document).ready(function(){
var formObj = $("form[name='writeForm']");
$(".write_btn").on("click", function(){
if(fn_valiChk()){
return false;
}
formObj.attr("action", "/board/write");
formObj.attr("method", "post");
formObj.submit();
});
})
function fn_valiChk(){
var regForm = $("form[name='writeForm'] .chk").length;
for(var i = 0; i<regForm; i++){
if($(".chk").eq(i).val() == "" || $(".chk").eq(i).val() == null){
alert($(".chk").eq(i).attr("title"));
return true;
}
}
}
</script>
<body>
<div id="root">
<header>
<h1> 게시판</h1>
</header>
<hr />
<div>
<%@include file="nav.jsp" %>
</div>
<hr />
<section id="container">
<form name="writeForm" method="post" action="/board/write">
<table>
<tbody>
<tr>
<td>
<label for="title">제목</label><input type="text" id="title" name="title" class="chk" title="제목을 입력하세요."/>
</td>
</tr>
<tr>
<td>
<label for="content">내용</label><textarea id="content" name="content" class="chk" title="내용을 입력하세요."></textarea>
</td>
</tr>
<tr>
<td>
<label for="writer">작성자</label><input type="text" id="writer" name="writer" class="chk" title="작성자를 입력하세요."/>
</td>
<tr>
<td>
<button class="write_btn" type="submit">작성</button>
</td>
</tr>
</tbody>
</table>
</form>
</section>
<hr />
</div>
</body>
</html>
writeView.jsp를 .do로 호출하면
이렇게 404오류가 계속 뜹니다..
nav.jsp에서 목록이나 로그인버튼 작동은 되고 현재 글 작성 버튼만 누르면 저 문제가 생깁니다..
몇시간동안 구글검색도 계속 해보면서 오류를 잡으려고 했는데도 해결이 안되더라고요ㅠㅠ
혹시 어느 부분이 틀린건지 여쭤봐도 될까요??ㅠㅠ