package com.smhrd.web;
import java.util.ArrayList;
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.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.smhrd.domain.Board;
import com.smhrd.mapper.BoardMapper;
// 어노테이션
// POJO임을 명시
@Controller
public class BoardController {
//IOC : Inbersion of Controll(제어 역전)
//우리가 xml에 적어두면, spring이 알아서 객체 생성 사용을 한다
// DI : Dependency Injection(의존성 주입)
@Autowired //self service
BoardMapper mapper;
//메서드 <--> 주소 연결(Mapping)
// /boardList요청이 들어오면 이 메서드 실행
@RequestMapping("/boardList.do")
public String boardList(HttpServletRequest request) {
//Request나, Session같이 필요한게 있으면, 매개변수
//게시물 가져오기
List<Board> list = mapper.boardList();
//객체바인딩
request.setAttribute("list", list);
//jsp(view) 파일의 이름
//forward방식 이동
// /WEB-INF/views/boardList.jsp
return "boardList";
}
@RequestMapping("/boardForm.do")
public void boardForm() {
}
@RequestMapping("/boardInsert.do")
public String boardInsert(Board vo) {
// 1. input태그의 name == VO의 필드명 == table의 컬럼명
// 2. 기본생성자
// 매개변수를 통해서 파라미터 수집가능
// 만약 한개만 보내주는 경우라면? - 매개변수 변수명 == input태그의 name
// 파라미터 수집
// form태그로 보낸 데이터 받기(변수에 담기)
/*
* String title = request.getParameter("title"); String writer =
* request.getParameter("writer"); String content =
* request.getParameter("content");
*
* Board vo = new Board(); vo.setTitle(title); vo.setWriter(writer);
* vo.setContent(content);
*/
// 게시글 저장
mapper.boardInsert(vo);
// /WEB-INF/views/boardList.do.jsp
// Redirect : 컨트롤러(POJO 메소드로 다시 요청하는 경우 사용)
// urlMapping앞에 redirect:/를 붙이면 동작한다.
return "redirect:/boardList.do";
}
@RequestMapping("/boardContent.do")
public void boardContent(int idx, Model model) {
// DB에서 글 가져오기
Board vo = mapper.boardContent(idx);
mapper.boardCount(idx);
// 객체바인딩
// Model -> 객체바인딩 특화, request영역에 저장
model.addAttribute("vo", vo);
}
@RequestMapping("/boardDelete.do/{idx}")
public String boardDelete(@PathVariable("idx") int num) {
//주소 모양 그대로 데이터를 보내는 방식 : path variable
//RequestMapping에서 /{name} 을 통해 받아줘야함
//@PathVariable : 메서드의 매개변수로 Path Variable의 값을 받아옴
//@PathVariable("name") : name 값에 해당하는 path Variable값을 매개변수에 담아준다
// @RequestParam("name") : 변수의 이름이 일치하지 않아도 수집
mapper.boardDelete(num);
return "redirect:/boardList.do";
}
//Get방식 요청만 받아들이는 Controller
//boardUpdate.jsp이동
@GetMapping("/boardUpdate.do")
public String boardUpdateForm(int idx, Model model) {
Board vo = mapper.boardContent(idx);
model.addAttribute("vo",vo);
return "boardUpdate";
}
//같은 url요청이라도, 요청방식에 따라 다른 처리를 해야할 때 사용
//실제 Update기능
@PostMapping("/boardUpdate.do")
public String boardUpdateForm(Board vo) {
mapper.boardUpdate(vo);
return "redirect:/boardContent.do?idx="+vo.getIdx();
}
}