728x90
wirte.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>우리반 화이팅</title>
<!-- Bootstrap CDN -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<form:form action="${root }board/wrtie_pro" method="post" modelAttribute="writeBean">
<form:hidden path="contest_board_idx"/>
<div class="form-group">
<form:label for="content_subject">제목</form:label>
<form:input path="content_subject" class="form-control"/>
<form:errors path="content_subject" style='color:red'/>
</div>
<div class="form-group">
<form:label for="content_text">내용</form:label>
<form:textarea class="form-control" path="content_text"
rows="10" style="resize:none"/>
<form:errors path="content_text" style='color:red'/>
</div>
<div class="form-group">
<div class="text-right">
<form:button class="btn btn-primary">작성하기</form:button>
</div>
</div>
</form:form>
</div>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
BoardController
package kr.bit.controller;
import kr.bit.beans.Content;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/board")
public class BoardController {
@GetMapping("/main")
public String main(@RequestParam("board_info_idx") int board_info_idx,
Model model) {
model.addAttribute("board_info_idx", board_info_idx);
return "board/main";
}
@GetMapping("/read")
public String read() {
return "board/read";
}
@GetMapping("/write")
public String write(@ModelAttribute("writeBean") Content writeBean,
@RequestParam("board_info_idx") int board_info_idx) {
return "board/write";
}
@GetMapping("/modify")
public String modify() {
return "board/modify";
}
@GetMapping("/delete")
public String delete() {
return "board/delete";
}
}
main.jsp
아래와 같이 코드 변경
<div class="text-right">
<a href="${root }board/write?board_info_idx=${board_info_idx}" class="btn btn-primary">글쓰기</a>
</div>
2팀을 누르고 글쓰기하는경우 board_info_idx=[값]이 잘 적용된 모습
Content
@NotBlank 추가해서 유효성검사 추가!(붙여서 위아래 놔도 구분되어 들어감)
package kr.bit.beans;
import javax.validation.constraints.NotBlank;
public class Content {
@NotBlank
private int content_idx;
@NotBlank
private String content_subject;
private String content_text;
private int content_writer_idx;
private int content_board_idx;
private String content_date;
public int getContent_idx() {
return content_idx;
}
public void setContent_idx(int content_idx) {
this.content_idx = content_idx;
}
public String getContent_subject() {
return content_subject;
}
public void setContent_subject(String content_subject) {
this.content_subject = content_subject;
}
public String getContent_text() {
return content_text;
}
public void setContent_text(String content_text) {
this.content_text = content_text;
}
public int getContent_writer_idx() {
return content_writer_idx;
}
public void setContent_writer_idx(int content_writer_idx) {
this.content_writer_idx = content_writer_idx;
}
public int getContent_board_idx() {
return content_board_idx;
}
public void setContent_board_idx(int content_board_idx) {
this.content_board_idx = content_board_idx;
}
public String getContent_date() {
return content_date;
}
public void setContent_date(String content_date) {
this.content_date = content_date;
}
}
BoardController
write 부분 변경 및 추가
@GetMapping("/write")
public String write(@ModelAttribute("writeBean") Content writeBean,
@RequestParam("board_info_idx") int board_info_idx) {
return "board/write";
}
@PostMapping("/write_pro")
public String write_pro(@Valid @ModelAttribute("writeBean") Content writeBean,
BindingResult result) {
if (result.hasErrors()) {
return "board/write";
}
return "board/write_success";
}
전체코드
package kr.bit.controller;
import kr.bit.beans.Content;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@Controller
@RequestMapping("/board")
public class BoardController {
@GetMapping("/main")
public String main(@RequestParam("board_info_idx") int board_info_idx,
Model model) {
model.addAttribute("board_info_idx", board_info_idx);
return "board/main";
}
@GetMapping("/read")
public String read() {
return "board/read";
}
@GetMapping("/write")
public String write(@ModelAttribute("writeBean") Content writeBean,
@RequestParam("board_info_idx") int board_info_idx) { // 글쓰기 할 팀 세팅
return "board/write";
}
@PostMapping("/write_pro")
public String write_pro(@Valid @ModelAttribute("writeBean") Content writeBean,
BindingResult result) {
if (result.hasErrors()) {
return "board/write";
}
return "board/write_success";
}
@GetMapping("/modify")
public String modify() {
return "board/modify";
}
@GetMapping("/delete")
public String delete() {
return "board/delete";
}
}
BoardMapper
package kr.bit.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
public interface BoardMapper {
//mysql에서 sql 매퍼에 추가되는 옵션설정할 때 사용하는 애노테이션
// useGeneratedKeys = true : 자동으로 생성하는 키 값을 mybatis가 사용할 수 있도록 허용
@Options(useGeneratedKeys = true, keyProperty = "content_idx")
@Insert("INSERT INTO content_table(content_subject, content_text, content_writer_idx, content_board_idx, content_date) " +
"VALUES (#{content_subject}, #{content_text}, #{content_writer_idx}, #{content_board_idx}, CURRENT_DATE())")
void addContent(Content writeContentBean);
}
BoardDao
package kr.bit.dao;
import kr.bit.beans.Content;
import kr.bit.mapper.BoardMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class BoardDao {
@Autowired
private BoardMapper boardMapper;
public void addContent(Content writeContntBean) {
boardMapper.addContent(writeContntBean);
}
}
BoardService
package kr.bit.service;
import javax.annotation.Resource;
import kr.bit.beans.Content;
import kr.bit.beans.User;
import kr.bit.dao.BoardDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BoardService {
@Autowired
private BoardDao boardDao;
@Resource(name="loginBean")
private User loginBean;
public void addContent(Content writeContentBean) {
// 제목 내용 저장하는
// 로그인 한 사람의 idx값을 가져와 글작성자 idx값 세팅
writeContentBean.setContent_writer_idx(loginBean.getUser_idx());
boardDao.addContent(writeContentBean);
}
}
BoardController
추가
@Controller
@RequestMapping("/board")
public class BoardController {
@Autowired
private BoardService boardService;
write_success 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<script>
alert('저장되었습니다.')
location.href = "${root}board/read?board_info_idx=${writeBean.content_board_idx}&content_idx=${writeBean.content_idx}"
</script>
BoardMapper
package kr.bit.mapper;
import kr.bit.beans.Content;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
public interface BoardMapper {
//mysql에서 sql 매퍼에 추가되는 옵션설정할 때 사용하는 애노테이션
// useGeneratedKeys = true : 자동으로 생성하는 키 값을 mybatis가 사용할 수 있도록 허용
@Options(useGeneratedKeys = true, keyProperty = "content_idx")
@Insert("INSERT INTO content_table(content_subject, content_text, content_writer_idx, content_board_idx, content_date) " +
"VALUES (#{content_subject}, #{content_text}, #{content_writer_idx}, #{content_board_idx}, CURRENT_DATE())")
void addContent(Content writeContentBean);
@Select("select board_info_name from board_infor_table where board_info_idx=#{board_info_idx}")
String getBoardName(int board_info_idx);
}
BoardDao
package kr.bit.dao;
import kr.bit.beans.Content;
import kr.bit.mapper.BoardMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class BoardDao {
@Autowired
private BoardMapper boardMapper;
public void addContent(Content writeContntBean) {
boardMapper.addContent(writeContntBean);
}
public String getBoardName(int board_info_idx) {
return boardMapper.getBoardName(board_info_idx);
}
}
BoardService
package kr.bit.service;
import javax.annotation.Resource;
import kr.bit.beans.Content;
import kr.bit.beans.User;
import kr.bit.dao.BoardDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BoardService {
@Autowired
private BoardDao boardDao;
@Resource(name = "loginBean")
private User loginBean;
public void addContent(Content writeContentBean) {
// 제목 내용 저장하는
// 로그인 한 사람의 idx값을 가져와 글작성자 idx값 세팅
writeContentBean.setContent_writer_idx(loginBean.getUser_idx());
boardDao.addContent(writeContentBean);
}
public String getBoardName(int board_info_idx) {
return boardDao.getBoardName(board_info_idx);
}
}
BoardController
코드 추가
public class BoardController {
@Autowired
private BoardService boardService;
@GetMapping("/main")
public String main(@RequestParam("board_info_idx") int board_info_idx,
Model model) {
model.addAttribute("board_info_idx", board_info_idx);
String boardName=boardService.getBoardName(board_info_idx);
model.addAttribute("boardName", boardName);
return "board/main";
}
Board/Main.jsp
이름 변경되면 받아올 수 있도록 코드 변경
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<h3 class="card-title">${boardName }</h3>
<table class="table table-hover" id="board_list">
<thead>
<tr>
페이지 작업
Content
@Getter, @Setter
private String content_writer_name;
BoardDao(RowBound)
package kr.bit.dao;
import kr.bit.beans.Content;
import kr.bit.mapper.BoardMapper;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class BoardDao {
@Autowired
private BoardMapper boardMapper;
public void addContent(Content writeContntBean) {
boardMapper.addContent(writeContntBean);
}
public String getBoardName(int board_info_idx) {
return boardMapper.getBoardName(board_info_idx);
}
public List<Content> getContent(int board_info_idx, RowBounds rowBounds){
return boardMapper.getContent(board_info_idx, rowBounds.getOffset(), rowBounds.getLimit());
}
}
option.properties
추가
page.listcount=10
page.pa=10
BoardService
프로퍼티 소스 추가
밸류 추가
페이징 작업 소스 추가
@Service
@PropertySource("/WEB-INF/properties/option.properties")
public class BoardService {
@Value("${page.listcount")
private int page_listcount;
@Value("${page.pa}")
private int page_pa;
public List<Content> getContent(int board_info_idx, int page){
int start=(page-1)*page_listcount;
RowBounds rowBounds = new RowBounds(start, page_listcount);
return boardDao.getContent(board_info_idx, rowBounds);
// return boardDao.getContent(board_info_idx, offset, pageSize);
}
}
전체 코드
package kr.bit.service;
import javax.annotation.Resource;
import kr.bit.beans.Content;
import kr.bit.beans.User;
import kr.bit.dao.BoardDao;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@PropertySource("/WEB-INF/properties/option.properties")
public class BoardService {
@Value("${page.listcount")
private int page_listcount;
@Value("${page.pa}")
private int page_pa;
@Autowired
private BoardDao boardDao;
@Resource(name = "loginBean")
private User loginBean;
public void addContent(Content writeContentBean) {
// 제목 내용 저장하는
// 로그인 한 사람의 idx값을 가져와 글작성자 idx값 세팅
writeContentBean.setContent_writer_idx(loginBean.getUser_idx());
boardDao.addContent(writeContentBean);
}
public String getBoardName(int board_info_idx) { // 팀 이름 추출
return boardDao.getBoardName(board_info_idx);
}
public List<Content> getContent(int board_info_idx, int page){
int start=(page-1)*page_listcount;
RowBounds rowBounds = new RowBounds(start, page_listcount);
return boardDao.getContent(board_info_idx, rowBounds);
// return boardDao.getContent(board_info_idx, offset, pageSize);
}
}
BoardController
코드추가
@GetMapping("/main")
public String main(@RequestParam("board_info_idx") int board_info_idx,
@RequestParam(value="page", defaultValue = "1") int page,
Model model) {
model.addAttribute("board_info_idx", board_info_idx);
String boardName=boardService.getBoardName(board_info_idx); // 팀명 추출 메소드
model.addAttribute("boardName", boardName);
List<Content> contentLi = boardService.getContent(board_info_idx, page);
model.addAttribute("contentLi", contentLi); 게시글 목록
return "board/main";
}
/Board/Main
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Fighting, Our Class</title>
<!-- Bootstrap CDN -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<h3 class="card-title">${boardName }</h3>
<table class="table table-hover" id="board_list">
<thead>
<tr>
<th class="text-center d-none d-md-table-cell">Post Number</th>
<th class="w-50">Title</th>
<th class="text-center d-none d-md-table-cell">Writer</th>
<th class="text-center d-none d-md-table-cell">Date</th>
</tr>
</thead>
<tbody>
<c:forEach var="obj" items="${contentLi}">
<tr>
<td class="text-center d-none d-md-table-cell">${obj.content_idx}
</td>
<td class="w-50">${obj.content_subject }<
</td>
<td class="text-center d-none d-md-table-cell">${obj.content_writer_name }
</td>
<td class="text-center d-none d-md-table-cell">${obj.content_date}
</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="d-none d-md-block">
<ul class="pagination justify-content-center">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">4</a></li>
<li class="page-item"><a class="page-link" href="#">5</a></li>
<li class="page-item"><a class="page-link" href="#">6</a></li>
<li class="page-item"><a class="page-link" href="#">7</a></li>
<li class="page-item"><a class="page-link" href="#">8</a></li>
<li class="page-item"><a class="page-link" href="#">9</a></li>
<li class="page-item"><a class="page-link" href="#">10</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
<div class="d-block d-md-none">
<ul class="pagination justify-content-center">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
<div class="text-right">
<a href="${root }board/write?board_info_idx=${board_info_idx}" class="btn btn-primary">Write Post</a>
</div>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
728x90
'Frameworks > Spring' 카테고리의 다른 글
[Spring] Board CRUD (Board Delete, Page ) (0) | 2024.05.17 |
---|---|
[Spring] Board CRUD (Board info, Board Modify) (0) | 2024.05.17 |
[Spring] Board CRUD (Login(orNot) TopMenu/ Modify) (0) | 2024.05.16 |
[Spring] Board CRUD (Validator + DB insert) III (0) | 2024.05.14 |
[Spring] Board CRUD (use Bootstrap) II (1) | 2024.05.14 |