Java/Spring

[Spring] 글 수정하기

퓨어맨 2022. 7. 18. 01:11
<%pageContext.setAttribute("LineChar", "\n"); %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:set var= "cpath" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div class = "container">
		<h2>Spring MVC Board</h2>
		<div class="panel panel-default">
		  <div class="panel-heading">BOARD</div>
		  <div class="panel-body">
		  	<table class = "table table-bordered">
		  		<tr>
		  			<td>제목</td>
		  			<td>${vo.title}</td>
		  		</tr>
		  		<tr>
		  			<td>내용</td>
		  			<!-- 개행할 수 있게끔 문자열 변환 -->
		  			<!-- \n ====> <br> -->
		  			<td>${fn:replace(vo.contents,LineChar,"<br>")}</td>
		  		</tr>
		  		<tr>
		  			<td>작성자</td>
		  			<td>${vo.writer}</td>
		  		</tr>
		  		<tr>
		  			<td>작성일</td>
		  			<td>${fn:split(vo.indate," ")[0]}</td>
		  		</tr>
		  		<tr>
		  			<td colspan = "2" align="center">
		  				<!-- location.href='${cpath}/boardUpdate.do?${vo.idx} -->
		  				<button onclick="goUpdate(${vo.idx})" class = "btn btn-primary btn-sm">수정</button>
		  				<button onclick="goDelete(${vo.idx})" class = "btn btn-danger btn-sm">삭제</button>
		  				<button onclick="goMain()" class = "btn btn-success btn-sm">리스트</button>
		  			</td>
		  		</tr>
		  	
		  	</table>
		  	</div>
		  	<div class="panel-footer">빅데이터 분석서비스 개발자과정(김운비)</div>	
		</div>
	</div>
	
	<script type="text/javascript">
		function goDelete(idx){
			location.href = '${cpath}/boardDelete.do/'+idx
		}
		
		function goUpdate(idx){
			location.href = '${cpath}/boardUpdate.do?i='+idx;
		}
		
		function goMain(){
			location.href = '${cpath}/basic.do'
		}
		
	</script>
	
	

	
	
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var= "cpath" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
<!-- bootstrap 사용하기 위해 필요한 라이브러리 3개! -->
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div class = "container">
		<h2>게시판 만들기</h2>
		<div class="panel panel-default">
		   <div class="panel-heading">SpringMVC 게시판</div>
		   <div class="panel-body">
		   
		   		<form class="form-horizontal" action="${cpath}/boardUpdate.do" method="post">

				      <input type="hidden" name="idx" value="${vo.idx}">
	
				  <div class="form-group">
				    <label class="control-label col-sm-2" for="title">제목:</label>
				    <div class="col-sm-10">
				      <input type="text" class="form-control" id="title" name="title" value="${vo.title}">
				    </div>
				  </div>
				  <div class="form-group">
				    <label class="control-label col-sm-2" for="writer">작성자:</label>
				    <div class="col-sm-10">
				      <input type="text" class="form-control" id="writer" name="writer" value="${vo.writer}">
				    </div>
				  </div>
				  <div class="form-group">
				    <label class="control-label col-sm-2" for="contents">내용:</label>
				    <div class="col-sm-10">
				    	<textarea rows="10" class="form-control" id="contents" name="contents">${vo.contents}</textarea>
				    </div>
				  </div>
				  <div class="form-group">
				    <div class="col-sm-offset-2 col-sm-10">
				      <button type="submit" class="btn btn-primary btn-sm">수정하기</button>
				      <button type="reset" class="btn btn-warning btn-sm">초기화</button>
				    </div>
				  </div>
				</form>
		  	
		   </div>
		</div>
	</div>

</body>
</html>

 

package kr.smhrd.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import kr.smhrd.mapper.BoardMapper;
import kr.smhrd.model.BoardVO;

@Controller // FrontController + Controller(POJO)
public class BoardController {
	
	// DB 쿼리문을 수행할 수 있는 인터페이스 생성
	// null pointer exception 뜨면 @Autowired 되어 있는지 확인
	@Autowired // DI
	private BoardMapper mapper;
	
	// 메소드 : public String 메소드명 ()
	@RequestMapping("/basic.do")
	// Handler Mapping --> basic.do 라는 요청 url과 basic method를 연결!
	public String basic(Model model) {
		
		List<BoardVO> list = mapper.boardList();

		// forward방식으로 view에 접근
		// : url이 안바뀌고 있기 때문에
		// : 특정 값들을 넘겨주기 위해서는 request에 담아서 넘겨주면 된다.
		// : request객체가 필요하면 메소드의 매개변수로 request를 받겠다고 쓰면 된다!
		// ----> Spring framework에서 알아서 관리!
		// ★★★객체 바인딩
		model.addAttribute("list", list);
		
		return "basic"; // 논리적인 주소 -- ViewResolver -- 물리적인 주소
		// basic --> /WEB-INF/views/basic.jsp
	}
	
	// 글쓰기 페이지로 이동만 하는 메소드
	@RequestMapping(value = "/boardInsert.do", method = RequestMethod.GET)
	public String boardInsert() {
		return "boardInsert";
	}
	
	// 글쓰기를 수행하는 메소드
	@RequestMapping(value = "/boardInsert.do", method = RequestMethod.POST)
	public String boardInsertData(BoardVO vo) {
		// form태그에서 넘겨주는 데이터를 받아올 때는 매개변수에 받아올 자료형을 넣어주면
		// spring framework가 자동으로 해당하는 데이터를 받아온다.
		// ** input태그의 name 값 == vo의 field명 == db table column
		// xml안쪽에 쿼리문을 작성 --> interface --> controller
		
		// 작성자, 내용, 제목을 받아와서 데이터베이스에 insert 해주는 작업
		// 1.interface안에 insert를 수행할 수 있는 메소드 생성
		mapper.boardInsert(vo);
		
		// 2. xml파일 안에 interface메소드와 대응될 수 있는 id값을 가지고 있는 태그 생성
		// 3. 쿼리문을 작성
		
		
		return "redirect:/basic.do";
		// redirect방식을 사용하고 싶을때는 redirect:/ 를 반드시 붙여준다.
	}
	
	// 글 내용 보는 메소드
	@RequestMapping("/boardContent.do")
	public String boardContent(int idx, Model model) {
		//Model
		//---> request scope에 데이터를 저장하는 객체
		//---> HttpServletRequest의 경량화 버전
		
		// 수집해야하는 파라미터가 한개 일때는 매개변수에 정확한 자료형과 변수명을 입력!
		// String --> int spring framework에서 자동으로 수행한다.
		
		BoardVO vo = mapper.boardContent(idx);
		
		//request영역에 데이터를 추가하기!
		model.addAttribute("vo", vo);
		
		return "boardContent";
	}
	
	// 2번째 get방식으로 데이터가 들어왔을 때 처리하는 방법
	// 쿼리스트링 --> url에 데이터가 포함되어있을 때 파라미터 수집을 어떻게 할 수 있는가?
	// ex) boardDelete.do?idx=1 --> boardDelete.do/1
	@RequestMapping("/boardDelete.do/{idx}")
	public String boardDelete(@PathVariable("idx") int idx) {
		// @PathVariable --> 주소값에 포함되어 있는 데이터를 꺼내올 때 사용
		// 데이터베이스에서 데이터 삭제!
		mapper.boardDelete(idx);
		
		return "redirect:/basic.do";
	}
	
	// 글 수정 페이지로 넘어가는 메소드
	@RequestMapping(value = "/boardUpdate.do", method = RequestMethod.GET)
	public String boardUpdateGet(@RequestParam("i") int idx, Model model) {
		//@RequestParam
		//요청 시 넘겨준 name값과 다른 변수명을 부여하고 싶을 때 사용하는 annotation
		
		// 1. select * from board where idx = #{idx} 쿼리를 실행
		// ---> Controller에서 쿼리문 실행하려면? mapper interface 사용해야함
		
		BoardVO vo = mapper.boardContent(idx);
		
		// 2. request scope 객체 바인딩
		// ---> Model 사용
		model.addAttribute("vo", vo);
		
		// 3. boardUpdateForm.jsp안에서 객체바인딩 된 데이터를 꺼내서 안쪽에 출력
		
		// 4. 실제로 업데이트 하는거 까지!
		
		
		return "boardUpdateForm";
	}
	
	// 글 수정 페이지에서 수정한 값으로 변경하는 메소드
	@RequestMapping(value = "/boardUpdate.do", method = RequestMethod.POST)
	public String boardUpdatePost(BoardVO vo) {
		
		mapper.boardUpdate(vo);
		
		return "redirect:/boardContent.do?idx="+vo.getIdx();
	}
	
}

 

package kr.smhrd.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;

import kr.smhrd.model.BoardVO;

public interface BoardMapper {
		
	public List<BoardVO> boardList();
	
	public void boardInsert(BoardVO vo);
	
	@Select("select * from board where idx=#{idx}")
	public BoardVO boardContent(int idx);
	
	// 쿼리문이 간단하다면 위쪽에 annotation 추가해서 처리할 수 있다.
	@Delete("delete from board where idx=#{idx}")
	public void boardDelete(int idx);

	public void boardUpdate(BoardVO vo);
	
}

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.smhrd.mapper.BoardMapper">
    
    <select id="boardList" resultType="kr.smhrd.model.BoardVO">
		select *
		from board
    </select>
    
    <insert id="boardInsert" parameterType="kr.smhrd.model.BoardVO">
		insert into board(title,writer,contents)
		values(
			#{title},
			#{writer},
			#{contents}
		)
    </insert>
    
    <update id="boardUpdate" parameterType="kr.smhrd.model.BoardVO">
        update board
        set title=#{title}, writer=#{writer}, contents=#{contents}, indate= now()
        where idx=#{idx}
    </update>
    
</mapper>

 

 

 

'Java > Spring' 카테고리의 다른 글

[Spring] REST & 3Tier  (0) 2022.07.20
[Spring] 게시판 목록 보기(jquey+ajax)  (0) 2022.07.18
[Spring] 글 삭제하기  (0) 2022.07.18
[Spring] 글 내용 보기  (0) 2022.07.18
[Spring] jstl-functions  (0) 2022.07.18