2013-05-03 103 views
1

我想用@exceptionhandler捕捉HTTP狀態500 - 預期會話屬性。我想返回一條消息給我向用戶顯示錯誤的同一頁面。使用用SpringMVC HTTP @ExceptionHandler狀態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; 
    } 

查看

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

我認爲你可以做的就是檢查屬性是否爲null拋出一個你可以在@ExceptionHandler中捕獲的異常,然後通過添加的消息回到相同的視圖。看到這個https://github.com/SpringSource/spring-mvc-showcase/tree/master/src/main/java/org/springframework/samples/mvc/exceptions和http://stackoverflow.com/questions/2757198/ – apurvc 2013-05-03 05:49:45

回答

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是相對於應用程序路徑。你可以從引用者中提取它。

+0

我也在異常處理程序中嘗試redirectView.addStaticAttribute(「errorMessage」,ex.getMessage()),但它不在視圖中設置消息。該視圖有一個標籤 devdar 2013-05-03 14:27:20

+1

@dev_darin關於如何在重定向外觀設置屬性[here](http://static.springsource.org/spring/ docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-redirect-attributes) – zeroflagL 2013-05-03 14:43:05

+0

如果我將方法類型更改爲返回除RedirectView之外的其他任何內容,則異常不會進入它。 – devdar 2013-05-03 15:09:47

1

您可以從@ExceptionHandler方法採用了類似下面的返回一個ModelAndView。

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

問題是搞清楚你以前的頁面。據我所知,沒有辦法從ExceptionHandler方法中獲取當前的模型和視圖,因此您無法很好地知道要使用哪個視圖。

我認爲你最好的選擇是捕捉和處理你的控制器中的異常。

+0

這意味着我將不得不重定向到異常頁面? – devdar 2013-05-03 12:01:35

相關問題