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

+ Recent posts