2013-05-03 1 views
1

내가 @exceptionhandlerHTTP 상태 500 캡처하는 데 사용하고 싶습니다 - 예상 세션 속성을. 사용자에게 오류를 표시하는 것과 동일한 페이지로 메시지를 보내고 싶습니다.SpringMVC @ExceptionHandler HTTP 사용 상태 (500) - 예상 세션 속성

다른 사람이이 예외를 처리하고 다른 페이지로 리디렉션하지 않고보기로 메시지를 반환하는 방법에 대한 예제를 가리킬 수 있습니까?

이것은 지금까지 내가보기에는 항목이 오류 메시지와 함께 설정되지 않고 있습니다.

@ExceptionHandler(HttpSessionRequiredException.class) 
    public RedirectView handleHttpSessionRequiredException(Exception ex, HttpServletRequest request) throws Exception 
    { 
     logger.info("In the handleHttpSessionRequiredException Handler Method"); 
     String referrer = request.getHeader("referer"); 
     RedirectView redirectView = new RedirectView(referrer); 
     redirectView.addStaticAttribute("errorMessage","Execute A Query Then Retry"); 
     return redirectView; 
    } 

당신은 다음과 같은 것을 수행하여 @ExceptionHandler 방법에서의 ModelAndView를 반환 할 수 있습니다

<label id="errorMessage" name="errorMessage">${errorMessage}</label> 
+1

당신이 할 수있는 일은 @ExceptionHandler에서 catch 할 수있는 BusinessException을 throw하는 속성이 null인지 확인하고 추가 된 메시지로 동일한보기를 수행하는 것입니다. 이 https://github.com/SpringSource/spring-mvc-showcase/tree/master/src/main/java/org/springframework/samples/mvc/exceptions 및 http://stackoverflow.com/questions/2757198/을 참조하십시오. – apurvc

답변

1

리퍼러를 가져 와서 전달하거나 리디렉션 할 수 있습니다. 예 :

@ExceptionHandler(HttpSessionRequiredException.class) 
public String (HttpServletRequest request) { 
    String referrer = request.getHeader("referer"); 
    ... 
    FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request); 
flashMap.put("errorMessage","Execute A Query Then Retry"); 
    return "redirect:/my/url"; 
} 

리디렉션 URL은 응용 프로그램 경로를 기준으로합니다. 당신은 referer에서 추출 할 수 있습니다.

+0

또한 예외 처리기에서 redirectView.addStaticAttribute ("errorMessage", ex.getMessage())를 시도하고 있지만보기에서 메시지를 설정하지 않았습니다. 보기에는 devdar

+1

@dev_darin 레이블이 있습니다. 리디렉션 모양 [here] (http://static.springsource.org/spring/)에서 속성을 설정하는 방법은 docs/3.2.x/spring-framework-reference/html/mvc.html # mvc-ann-redirect-attributes) – zeroflagL

+0

RedirectView 이외의 다른 것을 반환하도록 메소드 유형을 변경하면 예외가 발생하지 않습니다. – devdar

1

보기.

@ExceptionHandler(IOException.class) 
public ModelAndView handleIOException(IOException ex) { 
    ModelAndView modelAndView = new ModelAndView(); 
    modelAndView.addObject("someObject", new SomeObject()); 
    modelAndView.setViewName("someView"); 
    return modelAndView; 
} 

문제는 이전의 현재 페이지를 찾는 것입니다. 필자가 아는 한 ExceptionHandler 메서드 내부에서 현재 모델과 뷰를 가져 오는 방법이 없으므로 사용할 뷰를 알 수있는 좋은 방법이 없습니다.

당신의 최선의 방법은 컨트롤러에서 Exception을 잡아서 처리하는 것입니다.

+0

이것은 예외 페이지로 리디렉션해야한다는 것을 의미합니까? – devdar

관련 문제