@Controller
public class A03_ModelController {
// get방식으로 화면 호출
// http://localhost:7080/springweb/call10.do
@GetMapping("/call10.do") // 초기 보여줄 화면
public String call10() {
return "WEB-INF\\views\\a01_start\\a10_callCalcu.jsp";
}
@PostMapping("/call10.do") // 요청값을 받았을 때 구현할 화면
public String call11( @RequestParam("price") int price,
@RequestParam("cnt") int cnt,
Model d) {
d.addAttribute("calcu",price*cnt); // 모델데이터 생성
return "WEB-INF\\views\\a01_start\\a10_callCalcu.jsp";
}
}
# a10_callCalcu.jsp
// 요청값 넘기기
<input name="price" class="form-control mr-sm-2" placeholder="물건가격" />
<input name="cnt" class="form-control mr-sm-2" placeholder="물건갯수" />
// value값 ${param.key}로 요청데이터를 받아올 수 있고, 모델 데이터는 ${모델데이터 key}로 사용 가능하다.
<tr><td>${param.price }</td>
<td>${param.cnt}</td>
<td>${calcu }</td></tr>
1) controller의 요청값 옵션
2) 모델 설정
3)뷰단 처리
return "호출한 view단 주소(html/jsp/json데이터)";
★★ forward 방식으로 호출하면서 모델데이터를 넘긴다.
ex) redirect방식과 forward 방식의 차이
response.sendRedirect("") : redirect 방식
request.getRequestDispatcher("").forward(request,response) : forward 방식
# 랜덤 구구단 문제 만들기
@RequestMapping("/hw03.do")
public String hw05(
@RequestParam(value="grade", defaultValue = "0") int grade,
@RequestParam(value="cnt", defaultValue = "0") int cnt,
@RequestParam(value="inReply", defaultValue = "0") int inReply,
Model d
) {
// 초기화면에 문제 세팅
d.addAttribute("rGrade",(int)(Math.random()*8+2));
d.addAttribute("rCnt",(int)(Math.random()*9+1));
if(grade!=0) { //초기화면과 구분(submit했을 때)
String msg = grade*cnt ==inReply?"정답":"오답";
d.addAttribute("msg",msg);
}
return "WEB-INF\\views\\z01_hw\\z03_hw.jsp";
}
# z03_hw.jsp
<form id="frm01" class="form-inline" method="post">
<input name="grade" class="form-control mr-sm-2" value="${rGrade }"/>X
<input name="cnt" class="form-control mr-sm-2" value="${rCnt }"/>=
<input name="inReply" class="form-control mr-sm-2" />
<button class="btn btn-info" type="submit">정답확인</button>
</form>
<script>
$(document).ready(function(){
var msg = "${msg}"
if(msg!=""){alert(msg)} })
</script>
@@ 김밥가격[0] 갯수 @ 총계 @@@ [다음 1개 확인] 초기화면
버튼 클릭시 마다 입력된 가격에서 한개씩 갯수가 올라가 계산되게 하세요
# controller
/*요청값 price, cnt
모델값 tot
매개변수 VO생성 Kimbap kb*/
@RequestMapping("/hw07.do")
public String hw09(Kimbap kb) {
if(kb.getPrice()>0) { //초기화면과 구분
kb.setCnt(kb.getCnt()+1); // 갯수 +1
kb.setTot(kb.getPrice()*kb.getCnt()); //합계 변경
}
return "WEB-INF\\views\\z01_hw\\z07_hw.jsp";
}
# view단
<form id="frm01" class="form-inline" method="post">
<input name="price" class="form-control mr-sm-2" value="${kimbap.price }" />
<input name="cnt" class="form-control mr-sm-2" value="${kimbap.cnt }" />
<input value="${kimbap.tot }" class="form-control mr-sm-2" />
<button class="btn btn-info" type="submit">다음 ${kimbap.cnt+1 }개 확인</button>
</form>