我是Spring,也是JSP中的新成員。我正在項目中工作,我需要創建一個頁面,在特定的例外情況下應用程序將被重定向。 我有服務的方法拋出一個例外。這個方法在我們的一個頁面控制器中用@RequestMapping註解來調用。因此,爲了重定向到特定的錯誤頁面,我使用@ExceptionHanlder創建了兩個方法來處理此控制器中的這些異常。它看起來如何:使用JSP處理由Spring處理的異常顯示消息
@ExceptionHandler(IllegalStateException.class)
public ModelAndView handleIllegalStateException (IllegalStateException ex) {
ModelAndView modelAndView = new ModelAndView("redirect:/error");
modelAndView.addObject("exceptionMsg", ex.getMessage());
return modelAndView;
}
但還不夠。我還需要創建ErrorPageController:
@Controller
@RequestMapping("/error")
public class ErrorPageController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView displayErrorPage() {
return new ModelAndView("error");
}
}
現在工程顯示錯誤頁面。但我的問題是,我不能在JSP中顯示錯誤信息...... 我:
<h3>Error page: "${exceptionMsg}"</h3>
但我沒有看到一個消息; /取而代之的是,我在URL看到消息:
localhost/error?exceptionMsg=Cannot+change+participation+status+if+the+event+is+cancelled+or+it+has+ended.
而且因爲在網址我想有隻「本地主機/錯誤」,僅此而已這是錯的。這條消息我想在JSP中顯示。
因爲您使用空模型創建新模型和視圖。但爲什麼你需要一個自定義異常處理程序?默認的策略包括拋出的異常在一個名爲'exception'的屬性中。這樣它應該可用於您的錯誤頁面。這裏的主要問題是你正在做一個重定向來觸發一個新的請求,因此你需要一個控制器。默認情況下,模型參數被編碼爲請求參數。在處理錯誤的控制器中,不要創建新的模型和視圖,只需在頁面中返回「錯誤」,或者在配置中聲明視圖控制器,就可以爲您節省一個類。 –
嗯,它的工作原理,但如何在JSP中顯示消息?是否有可能打印其他網址?因爲現在我有我打開的URL,但我想看到或被重定向到「localhost/error」。我需要這個,因爲應用程序以這種方式工作... – Lui
重定向不是問題在於控制器選擇視圖時,您正在使用該控制器銷燬模型(即使其爲空)。此外,對於重定向,您希望使用「RedirectAttributes」而不是普通模型。 –