-
(EL/JSP) 컨트롤러에서 전송한 값이 ${el} 로 출력 안될 때무식하면몸이고생lgd 2022. 5. 15. 22:49
✅ 요약
1. 목표한 것 : 컨트롤러 내의 실행결과를 view로 전달해 페이지에 표시하기
2. 배운 것 : model.attribute 실행 후에는 "redirect:/" 형태의 이동이 불가능하다
3. 5/21 더 배운 것 : 이럴 때 쓰라고 RedirectAttributes가 있다.@RequestMapping(value="/login.do") public String login(User user, HttpSession session, Model model) { User u = service.selectOneUser(user); if(u==null) { model.addAttribute("msg",1); }else { session.setAttribute("loginUser", u); } return "redirect:/"; }
원래 생각, 로그인하면
(1) 무조건 메인 페이지로 리다이렉트하되
(2) 에러날 경우에는 msg를 같이 전달해
(3) view 단에서 해당 msg를 el형식으로 ${msg} 노출할 계획이었다.
그런데 아무리 오바를 떨어도 안 되길래 뭐가 문제였지 하다가 은인같은 글을 발견함... ㅡㅡ;;
OKKY | java에서 Model값을 jsp에서 출력이 안되는 문제
// 회원가입 내용 저장하기 RequestMapping(value member/joinSave , method RequestMethod.POST) public String joinSave( ModelAttribute MemberDTO dto, RequestParam String password2, Model mo
okky.kr
요약 : model.attribute()를 건 경우에는 view 페이지로는 이동 가능하지만 컨트롤러로는 불가능하다.
아니 사실 가능하긴 한데? (이동 자체는 됨) model에 넣은 값이 매개변수로 인식되기 때문에 내가 원하는 것처럼 화면에 표시하는게 안된다는 뜻...
@RequestMapping(value="/login.do") public String login(User user, HttpSession session, Model model) { User u = service.selectOneUser(user); if(u==null) { model.addAttribute("msg",1); return "common/gotomain"; }else { session.setAttribute("loginUser", u); return "redirect:/"; } }
redirect를 걸지 않고 jsp로 곧장 이동을 걸어주면 정상적으로 페이지에 model로 넣은 값이 출력된다.
사실 따지고 보면? EL 문제는 아니었긴 한데? 아무튼 그런걸로...
그런데 나는 사실 원래 목표가 메인페이지에 가는 거였는데... redirect를 못 쓰면 메인페이지(index)로 못 가잖아...?
그러면 페이지를 새로 만들어야 하는데...? (여기가 본심)
그래서 선택한 게 jsp:forward로 새 페이지에서 메인페이지 곧장 포워딩해줌. ㅎㅎ
이 경우 편리한 게 전단계에서 받아온 model값을 index페이지에 가서도 곧장 사용할 수 있다. 결론적으로 한바퀴 돌아서 내가 원하는 대로 만들수 있게 됨.
(5/21 추가)
위처럼 jsp:forward를 걸어서 이동하면 특징이자 장점이 원 링크(=파라미터값)을 그대로 가지고 이동할 수 있다는 거다.
이 이유 때문에 내가 jsp:forward를 선택한 거지만 이 경우 새로고침을 하면 원 링크값 그대로 새로고침되기 때문에 데이터의 crud가 두번 일어남... 글을 쓰면 두번 써지는 셈
그러다 찾아낸 게 RedirectAttributes라는 객체를 이미! 스프링이! 가지고 있었다는점!
RedirectAttributes(redirect 객체 전달) (tistory.com)
역시 무식하면 일을 두 번 한다. 맞다.
'무식하면몸이고생lgd' 카테고리의 다른 글
(javaScript) input 요소 입력중 엔터키 무효화가 안되는 문제 (submit방지) (0) 2022.05.15 (Javascript) 인라인 함수 뒤에 return false;를 쓰는 이유 (새로고침 방지) (0) 2022.05.11 (CSS) 만 가지고 차트 만들기 (0) 2022.04.18 (API) 공공데이터포털 API활용 / (JS/AJAX) 대분류에 따른 중분류 내용 변경 (0) 2022.04.14