2010-04-13 5 views
0

스프링 3을 사용하는 응용 프로그램이 있습니다. 문자열을 기반으로 내보기를 빌드하는보기 해결 프로그램이 있습니다. 그래서 제 컨트롤러에는이 메소드가 있습니다.스프링 리디렉션 : 접두어 문제

@RequestMapping(...) 
public String method(){ 
    //Some proccessing 
    return "tiles:tileName" 
} 

나는 때문에 브라우저에서 페이지를 업데이트하기 중복 제출을 해결하기 위해 만약 RedirectView를 반환해야, 그래서 나는 봄 리디렉션을 사용하여 생각 : 접두사. 문제는 사용자가 URL을 접두어로 변경할 때만 리디렉션된다는 것입니다 (리졸버가 이해할 수있는 이름이 아님).

@RequestMapping(...) 
public String method(){ 
    //Some proccessing 
    return "redirect:tiles:tileName" 
} 

문자열 (해석 가능한 뷰 이름) 나는 모든 컨트롤러의 방법에서 얻을으로 만약 RedirectView을 사용하는 방법은 없나요 : 나는 이런 식으로 뭔가를하고 싶어?

감사

답변

3

리디렉션 접두어 호출 : 표준 브라우저 302 리디렉션에 전송되는 URL입니다. 보기가 URL이 아니기 때문에보기로 재 지정할 수 없습니다. 대신 당신은 '성공'보기에 새 servelet 매핑을해야하고 그 대신

@RequestMapping("processing.htm") 
public String method(){ 
    //Some proccessing 
    return "redirect:success.htm" 
} 

@RequestMapping("success.htm") 
public String method(){ 
    return "tiles:tileName" 
} 

로 리디렉션 당신은 단지 특정 데이터를 필요로하지 않는 '감사합니다'페이지를 표시 할 때이 경우 잘 작동합니다 처리 단계에서. 그러나 성공 페이지에서 처리 중 일부 정보를 표시해야하는 경우 두 가지 방법이 있습니다.

1) URL의 정보를 get post ("redirect : success.htm? message = hi")로 전달하십시오. 이것은 엄청나게 해킹 가능하고, 따라서 매우 추천되지 않습니다.

2) 더 좋은 방법은 http 세션에 정보를 저장하는 것입니다. @SessionAttributes@ModelAttribute