인프런 커뮤니티 질문&답변

학운학운님의 프로필 이미지
학운학운

작성한 질문수

스프링 프레임워크는 내 손에 [스프1탄]

질문드립니다

작성

·

546

0

안녕하세요 선생님!

 

스프1탄 복습하고자 제가 만들고 싶은 게시판 만들고 있는데 문제가 생겼습니다.

 

스프1탄과 마찬가지로 header를 공통부분으로 하고 jsp:include page 사용해서 공통적으로 헤더를 적용했습니다.

 

게시판 수정을 위해서

@RequestMapping("/boardUpdate/{idx}")

public String boardUpdateForm(@PathVariable("idx") int idx, Model model) {

~~

}

 

이런식으로 컨트롤러에서 했구요.

 

boardUpdateForm.jsp는 form으로 해서 제출하게 했고 스프1탄에서 배운대로 form action에 그냥 boardUpdate 하지 않고 ../boardUpdate를 적용 했습니다.

 

그런데 문제는

HTTP 상태 400 – 잘못된 요청


타입 상태 보고

메시지 Required int parameter 'idx' is not present

설명 클라이언트 오류로서 인지된 어떤 문제로 인하여, 서버가 해당 요청을 처리할 수 없거나, 처리하지 않을 것입니다. (예: 잘못된 요청 문법, 유효하지 않은 요청 메시지 framing, 또는 신뢰할 수 없는 요청 라우팅).

 

이런식으로 잘못된 요청이라고 나옵니다.

 

그리고 헤더에 로고 경로를 src="resources/images/logo.png" 이렇게 해줬습니다.

그런데 이 이미지가 다른데서는 다 되는데 update 페이지 에서는 표시가 되지 않고

No mapping found for HTTP request with URI [/m01/boardUpdate/resources/images/logo.png]

이런식으로 console에 나오게 됩니다. 이것 뿐만 아니라 목록으로 가기 버튼도 만들었는데 마찬가지로 작동이 되지 않고 잘못된 요청이 나옵니다.

 

아무래도 pathvarible 이후로 경로가 context path/에서 context path/boardUpdate/ 로 바뀌어서 그런 것 같은데 도저히 수정이 안 되네요 ..

 

아래는 boardController.java입니다.

@Controller

public class BoardController {

@Autowired

private BoardMapper boardmapper;

// HandlerMapping

@RequestMapping("/")

public String root() {

return "redirect:/main";

}

@RequestMapping("/main")

public String main(Model model) {

List<Board> list = boardmapper.getLists();

model.addAttribute("list", list);

return "main"; // /WEB-INF/views/main.jsp -> forward

}

@RequestMapping("/boardWriteForm")

public String boardWriteForm() {

return "boardWriteForm";

}

@RequestMapping("/boardWrite")

public String boardWrite(Board vo) {

boardmapper.write(vo);

return "redirect:/main";

}

@RequestMapping("/boardMore")

public String boardMore(@RequestParam("idx") int idx, Model model) {

boardmapper.boardCount(idx);

Board vo = boardmapper.boardMore(idx);

model.addAttribute("vo", vo);

return "boardMore";

}

@RequestMapping("/boardDelete/{idx}")

public String boardDelete(@PathVariable("idx") int idx) {

boardmapper.boardDelete(idx);

return "redirect:/main";

}

@RequestMapping("/boardUpdate/{idx}")

public String boardUpdateForm(@PathVariable("idx") int idx, Model model) {

Board vo = boardmapper.boardMore(idx);

model.addAttribute("vo", vo);

return "boardUpdateForm";

}

@RequestMapping("/boardUpdate")

public String boardUpdate(Board vo) {

boardmapper.boardUpdate(vo);

return "redirect:/boardMore";

}

}

 

 

아래는 boardUpdateForm.jsp입니다.

<body>

<jsp:include page="header.jsp" />

<div class="container">

<h2>게시글 수정</h2>

<form action="../boardUpdate" method="post">

<input type="hidden" name="idx" value="${vo.idx}" />

<table class="table table-bordered">

<tr>

<td style="min-width: 100px;">제목</td>

<td><input type="text" name="title" class="form-control"

value="${vo.title}" required></td>

</tr>

<tr>

<td>내용</td>

<td><textarea name="content" class="form-control" rows="10"

required>${vo.content}</textarea></td>

</tr>

<tr>

<!-- 추후 세션으로 처리 -->

<td>작성자</td>

<td><input type="text" name="writer" class="form-control"

value="${vo.writer}" readonly></td>

</tr>

<tr>

<td colspan="2" align="right">

<button type="button" class="btn btn-danger"

onclick="location.href='../boardMore'">취소</button>

<button type="submit" class="btn btn-primary">수정완료</button>

</td>

</tr>

</table>

</form>

</div>

</body>

 

 

답변 1

0

박매일님의 프로필 이미지
박매일
지식공유자

@RequestMapping("/boardUpdate")

public String boardUpdateForm(int idx, Model model) {

이렇게 수정해서 해보시기 바랍니다.

<input type="hidden" name="idx" value="${vo.idx}" />

폼에서 hidden으로 파라메터(idx)가 넘어오기 때문에 위처럼 받아야됩니다.

학운학운님의 프로필 이미지
학운학운

작성한 질문수

질문하기