springmvc controller 간 재 정립 밴드 파라미터 도약 솔 루 션

5113 단어 springmvc
1. 필요 한 배경    수요: spring MVC 프레임 워 크 contrller 간 점프, 방향 을 바 꿔 야 합 니 다.몇 가지 상황 이 있 습 니 다. 매개 변 수 를 가지 고 뛰 지 않 고 매개 변 수 를 가지 고 url 형식 으로 뛰 며 매개 변 수 를 가지 고 매개 변 수 를 연결 하지 않 고 뛰 면 페이지 도 표시 할 수 있 습 니 다.
전통 적 인: redirect: select. do? id = "& name =" 을 통 해이렇게 연결 하여 실현 할 수도 있 지만 매개 변수 에 중국어 가 있 으 면 문제 가 생 길 수 있다.
RedirectAttributes
RedirectAttributes 는 spring 입 니 다. mvc 3.1 버 전 이후 에 나 온 기능 은 방향 을 바 꾼 후에 도 매개 변 수 를 가지 고 점프 할 수 있 습 니 다.                    여 기 는 addAttribute 방법 을 사용 합 니 다. 이것 은 실제 적 으로 과거 로 방향 을 바 꾼 후에 url 을 보 세 요. 이것 은 자동 으로 당신 의 url 을 맞 춘 것 입 니 다.그 는 두 가지 인삼 을 가 진 방식 이 있다. 첫 번 째 는: attr.addAttribute("param", value);   이러한 방식 은 방향 을 바 꾼 후에 url 뒤에 파 라 메 터 를 연결 하 는 것 과 같 습 니 다. 그러면 방향 을 바 꾼 페이지 나 컨트롤 러 에서 url 뒤의 파 라 메 터 를 가 져 오 면 됩 니 다. 그러나 이 방식 은 url 뒤에 파 라 메 터 를 추가 하 는 방식 이기 때문에 파 라 메 터 를 노출 시 켰 습 니 다. 위험 사례 가 있 습 니 다.
1
2
3 attr.addAttribute( "name" "123" );   attr.addAttribute( "success" "success" ); return   "redirect:/index" ;
return "redirect: / index? name = 123 & success = success" 두 번 째: attr.addFlashAttribute("param", value); 이 방식 도 다시 참조 할 수 있 고 파 라 메 터 를 숨 길 수 있 습 니 다. 그 원 리 는 session 에 넣 고 session 은 페이지 로 건 너 간 후 바로 대상 을 제거 하 는 것 입 니 다.그래서 새로 고침 하면 이 값 은 예 를 잃 어 버 립 니 다:
1
2
3 attr.addFlashAttribute( "status" , "999" ); attr.addFlashAttribute( "message" , " " ); return   "redirect:/toLogin" ;
이러한 방식 은 확실히 방향 을 바 꿀 수 있 지만 문제 가 있 습 니 다. 이것 은 페이지 로 만 바 꿀 수 있 습 니 다. 즉, 방향 을 바 꾸 는 이 페이지 보 기 는 el 표현 식 으로 인삼 의 값 을 직접 가 져 올 수 있 습 니 다. 예 를 들 어 status. 메시지 ,다 구 할 수 있어. 그러나 제 가 다른 컨트롤 러 로 방향 을 바 꾸 었 을 때 이 컨트롤 러 에서 이 두 개의 인 자 를 얻 을 수 없습니다. 저 는 지금 필요 한 것 이 있 습 니 다. 로그 인 에 성공 하고 다른 페이지 로 직접 방향 을 바 꾸 었 습 니 다. 로그 인 에 실 패 했 을 때 로그 인 페이지 로 다시 방향 을 바 꿔 야 합 니 다. 직접 return 하 는 것 은 안 되 지만 상태 코드 와 알림 등 인 자 를 가 져 와 야 하기 때문에 RedirectAttributes 의 addFlashAttribute 를 사용 하려 고 합 니 다. 방식그러나 / toLogin 이 컨트롤 러 에 다시 설정 할 때 addFlashAttribute 를 가 져 올 수 없습니다. 당초 추 가 된 속성.
구체 적 인 사례:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18                 // getFlashAttributes map, ,          Map map=(Map) attr.getFlashAttributes();          System.out.println(map.get( "status" ));          System.out.println(map.get( "message" ));                     //addFlashAttribute  flashAttribute request OutputFlashMap , request          // OutputFlashMap , maps ,          Map maps=RequestContextUtils.getOutputFlashMap(request);          System.out.println(maps.get( "status" ));          System.out.println(maps.get( "message" ));                     // OutputFlashMap InputFlashMap   FlashMapManager          //  “input” flash map  ,          //flash attribute   “output” flash map  , ,          // getInputFlashMap, , map2 null          Map map2=(Map)RequestContextUtils.getInputFlashMap(request);          System.out.println(map2.get( "status" ));          System.out.println(map2.get( "message" ));
spring 을 보 는 것 을 포함 하여 많은 자 료 를 찾 았 습 니 다. 화면 음악 c 의 공식 문 서 는 이 방향 을 바 꾼 후에 매개 변 수 를 어떻게 얻 는 지 에 대해 명확 한 설명 이 없다. 상기 세 가지 방식 을 포함 하고 내 가 직접 매개 변 수 를 얻 는 방식 도 안 된다. 그래서 RedirectAttributes 를 포기 하고 인삼 을 전달 하 는 것 을 포기 했다. 마지막 으로 session 으로 해결 하고 예전 에 session 을 설정 한 다음 에 값 을 가 져 와 session 을 제거 했다.효 과 는 다 했 는데 마음 이 계속 고민 이 돼 서 댓 글 을 달 아 보 세 요. 여러분 이 RedirectAttributes 의 addFlashAttribute 를 사용 할 수 있 는 지 확인 해 보 세 요. 방식, 그리고 다른 컨트롤 러 에서 이 추 가 된 매개 변수 값 을 가 져 옵 니 다.
모델 앤 드 뷰 나 모델 맵 으로 다 해결 할 수 있 을 것 같 아 요.

좋은 웹페이지 즐겨찾기