답변하기 기능

·2024년 11월 11일

스프링

목록 보기
23/33
	// 답변하기 화면
	@RequestMapping(value="boardReply.aws")
	public String boardReply(@RequestParam("bidx") int bidx,Model model){
		
		// 게시물 내용을 조회하는 메서드
		BoardVo bv = boardService.boardSelectOne(bidx);
			
		model.addAttribute("bv", bv);
		
		String path="WEB-INF/board/boardReply";
		return path;
	}
  1. 컨트롤러에 화면 구현 먼저 해놓기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="com.myaws.myapp.domain.BoardVo" %> 
<% BoardVo bv = (BoardVo)request.getAttribute("bv");%>
  1. Reply.jsp 파일 가져오기. 상단에는 여러개를 각각 가져오지 말고 bv에 담아서 객체를 꺼내기로 하자 수정.

  1. 하단에 이제 bv에서 꺼내야 하니까 수정해주기

  1. 파일 이름도 동일하게 수정을 해줘야 한다.
	// 글 답변하기 기능
	@RequestMapping(value= "boardReplyAction.aws")
	public String boardReplyAction(
		BoardVo bv, // 게시글 정보를 담고 있는 BoardVo 객체를 매개변수로 받음
		@RequestParam("attachfile") MultipartFile attachfile, // 업로드된 파일을 받기 위한 MultipartFile 객체
		HttpServletRequest request,
		RedirectAttributes rttr
		) throws Exception { // 윗단에 보고를 하는것
			
		int value = 0;
		MultipartFile file = attachfile; //저장된 파일 이름 꺼내기 
		String uploadedFileName=""; // 파일이 업로드된 후 저장된 파일명을 저장할 변수
				
		if(! file.getOriginalFilename().equals("")) { // 해당 파일이 존재한다면
			 // 파일을 서버에 저장하고 저장된 파일 이름을 반환받음
			uploadedFileName = UploadFileUtiles.uploadFile(uploadPath, file.getOriginalFilename(), file.getBytes());
		}
			
		String midx = request.getSession().getAttribute("midx").toString();
		int midx_int = Integer.parseInt(midx); 
		String ip = getUserIp(request);
				
		bv.setUploadedFilename(uploadedFileName);  // vo에 담아서 가져가기 
		bv.setMidx(midx_int);
		bv.setIp(ip);
			
		//수정 처리
		value = boardService.boardReply(bv); // 서비스에서 만든 메서드 호출하기
		
		int maxbidx = 0;
		String path="";
		
		if (maxbidx != 0) {  //성공 했을 경우 
			path = "redirect:/board/boardContents.aws?bidx="+ maxbidx;
		    } else {
		    rttr.addFlashAttribute("msg", "답변이 등록되지 않았습니다.");
		    path = "redirect:/board/boardReply.aws?bidx=" + bv.getBidx();	
		}
		    return path;
	}		    
			    
	
  1. Action 메서드 만들기

public int boardReply(BoardVo bv);
6. 서비스에 메서드 만들기

	@Transactional // 두개니까 하나로 묶기위한 트랜잭션
	@Override
	public int boardReply(BoardVo bv) {
		// 업데이트를 먼저 한 번 하고, 입력하기를 만들어야 한다. 
		// 그래서 메서드 두 개를 만들어야 한다.
		int value = bm.boardReplyUpdate(bv);
		int value2 = bm.boardReplyInsert(bv);  // 두개를 하나로 담아서 넘길거에용
		int maxBidx = bv.getBidx();
		
		return maxBidx;
	}
  1. impl로 가서 메서드 구현해주기
	public int boardReplyUpdate(BoardVo bv);
	public int boardReplyInsert(BoardVo bv);
  1. 마이바티스용 메서드에는 impl에 있는 미리 만든 메서드를 여기서 만ㄷ즐어준다
<!-- 게시물 답변달기 쿼리  -->
<update id="boardReplyUpdate" parameterType="bv">
update board set depth= depth+1 where originbidx =#{originbidx}  and depth > #{depth}
</update>
  1. 매퍼.xml에 가서 업데이트 쿼리 구문 만들어주기
<!-- 새 답변글을 넣으려는 쿼리 -->
<insert id="boardReplyInsert" parameterType="bv">
insert into board (originbidx,depth,level_,subject,contents,writer,midx,filename,password,ip)
values(#{originbidx},#{depth}+1,#{level_}+1,#{subject},#{contents},#{writer},#{midx},#{uploadedFilename},#{password},#{ip})
</insert>
  1. 그다음은 insert쿼리 구문 만들어주기 depth와 level_은 1씩 증가를 해야 하기 때문에 바깥에 1을 + 해주면 된다. 안에다가 하면 오류가 난다.
<!-- 새 답변글을 넣으려는 쿼리 -->
<insert id="boardReplyInsert" parameterType="bv">
	<selectKey keyProperty="bidx" resultType="int" order="AFTER">
	select max(bidx) as bidx from board 
	</selectKey>
insert into board (originbidx,depth,level_,subject,contents,writer,midx,filename,password,ip)
values(#{originbidx},#{depth}+1,#{level_}+1,#{subject},#{contents},#{writer},#{midx},#{uploadedFilename},#{password},#{ip})
</insert>
  1. select 키로 insert를 모두 처리한 ㅈ다음에 bidx 최고값을 뽑아내라는 key를 활용하면 된다.

  1. impl로 가서 리턴값을 수정해줘야 한다. 우리는 bidx 최고값을 꺼내려고 한거니까!
	// 글 답변하기 기능
	@RequestMapping(value= "boardReplyAction.aws")
	public String boardReplyAction(
		BoardVo bv, // 게시글 정보를 담고 있는 BoardVo 객체를 매개변수로 받음
		@RequestParam("attachfile") MultipartFile attachfile, // 업로드된 파일을 받기 위한 MultipartFile 객체
		HttpServletRequest request,
		RedirectAttributes rttr
		) throws Exception { // 윗단에 보고를 하는것
			
		
		MultipartFile file = attachfile; //저장된 파일 이름 꺼내기 
		String uploadedFileName=""; // 파일이 업로드된 후 저장된 파일명을 저장할 변수
				
		if(! file.getOriginalFilename().equals("")) { // 해당 파일이 존재한다면
			 // 파일을 서버에 저장하고 저장된 파일 이름을 반환받음
			uploadedFileName = UploadFileUtiles.uploadFile(uploadPath, file.getOriginalFilename(), file.getBytes());
		}
			
		String midx = request.getSession().getAttribute("midx").toString();
		int midx_int = Integer.parseInt(midx); 
		String ip = getUserIp(request);
				
		bv.setUploadedFilename(uploadedFileName);  // vo에 담아서 가져가기 
		bv.setMidx(midx_int);
		bv.setIp(ip);
		
		int maxBidx = 0; // 최신 게시물 
		maxBidx = boardService.boardReply(bv);
		
		String path="";
		
		if (maxBidx != 0) {  //성공 했을 경우 
			path = "redirect:/board/boardContents.aws?bidx="+ maxBidx;
		    } else {
		    rttr.addFlashAttribute("msg", "답변이 등록되지 않았습니다.");
		    path = "redirect:/board/boardReply.aws?bidx=" + bv.getBidx();	
		}
		    return path;
	}	
  1. 컨트롤러로 가서 마지막 수정을 하면ㅇ 됩니당

0개의 댓글