작성
·
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를 적용 했습니다.
그런데 문제는
타입 상태 보고
메시지 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)가 넘어오기 때문에 위처럼 받아야됩니다.