Spring

@ModelAttribute와 requestScope(request영역)에서의 forward 데이터활용법 예시

shika 2022. 1. 23. 16:15
=@GetMapping("/test5")
	public String test5(@ModelAttribute("bean1") DataBean1 bean1) {
		bean1.setData1("문자열6");
		bean1.setData2("문자열7");
		return "forward:result5";
	}
	
	@GetMapping("/result5")
//	public String result5(@ModelAttribute("bean1") DataBean1 bean1) { //Model로 받은값은 forward할때는 유지가 안되서 request로 받아야함!!!!!!
	public String result5(HttpServletRequest request) {
//		DataBean1 bean1 = (DataBean1)request.getAttribute("bean1");  여기서부터 밑에 3줄은 다됌 주석을 한 까닭은
//		System.out.println("bean1.data1 : "+bean1.getData1());       이렇게 아무것도 없어도 result5.jsp에서 ${bean1.data1}것을 출력할 수 있기 때문
//		System.out.println("bean1.data2 : "+bean1.getData2());
		return "result5";
}

이렇게 test5에서 @ModelAttriubte로 지정을 해주고

forward로 활용시에는

result5에서 아무것도 안해도 된다. 

그냥 request만 

public String result5(HttpServletRequest request) {

이렇게 파라미터에 넣어주면 된다.

 

그럼 알아서 requestScope가 유지되어서

사용이 가능하다.

<body>
	<h1>result5</h1>
	<h3>bean1.data1 : ${requestScope.bean1.data1 }</h3>
	<h3>bean1.data1 : ${requestScope.bean1.data2 }</h3>
</body>

jsp가 이럴때

바로 이렇게 결과가 나온다.

 

아무것도 안해도 ${bean1.data1}이라고 하면

똑똑한 el이 알아먹고 출력해준다.

 

나는 맨위 컨트롤러에서 주석을 한 부분이 있어야되는줄알았는데

그런 형변환 어쩌구 없어도

잘 출력이 된다!