javascript
jsf集成spring_Spring和JSF集成:异常处理
jsf集成spring
大多數JSF開發人員都會熟悉“發生錯誤”頁面,當在他們的代碼某處引發意外異常時,該頁面就會顯示。 該頁面在開發時確實很有用,但對于生產應用程序通常不是您想要的。 通常,在使用庫存JSF替換此頁面時,通常有兩種選擇。 您可以在web.xml中使用定義一些HTML <error-page>元素, 也可以 編寫自定義ExceptionHandler這兩個選項都不是Spring開發人員的理想選擇, <error-page>元素往往過于簡單,并且很難將Spring概念(例如依賴項注入)與自定義ExceptionHandler一起使用 。 幸運的是,JSF和Spring都是這么一個非常可擴展的框架項目 ,我一直在努力整合這些技術可以提供一些引人注目的替代品。
第一個可用選項允許ExceptionHandler被注冊為Spring Bean。 可以使用新的org.springframework.springfaces.exceptionhandler.ExceptionHandler接口,而不是使用現有的javax.faces.context.ExceptionHandler類。 該接口非常簡單,它定義了一個單一的handle方法,如果已處理了異常,則該方法應返回true 。 該接口使用泛型來限制所考慮的異常類型。
public interface ExceptionHandler<E extends Throwable> {boolean handle(E exception, ExceptionQueuedEvent event) throws Exception; }當JSF發生異常時,將查詢實現ExceptionHandler接口的所有相關bean。 返回true的第一個處理程序將“獲勝”,隨后的處理程序將不會被調用。 如果需要對處理程序進行排序,則可以使用org.springframework.core.Ordered接口或@Ordered批注。 當然,既然異常處理程序是常規的Spring Bean,則可以使用所有標準的Spring功能,例如依賴項注入和AOP。
現在我們有了基本的異常處理程序掛鉤,我們可以繼續提供一些有用的實現:
有時,處理某些異常的最佳方法是僅顯示一條消息并保留在當前屏幕上。 例如,假設搜索查詢范圍太廣時服務會拋出TooManyResultsException 。 一條簡單的消息告訴用戶“使用更精確的條件重試”可能是唯一需要的異常處理。 org.springframework.springfaces.exceptionhandler.ObjectMessageExceptionHandler類基于將對象映射到消息的先前工作 。 在您的Spring MessageSource中包含一個帶有Exception的全限定名稱的項作為鍵,如果拋出該異常,將顯示FacesMessage 。
com.mycorp.search.TooManyResultsException=Too many results found, please try again with more precise search terms您可以輕松地將任意數量的異常映射到消息,甚至可以使用消息字符串中的' {property} '占位符來引用異常的屬性 。 可以使用標準JSF技術(通常是<h:messages />組件)在屏幕上顯示消息 。
快速將異常映射到消息的支持很好,但是對于許多應用程序來說,這還遠遠不夠,編寫ExceptionHandler bean很快會變得很麻煩。 最終的可選選項是org.springframework.springfaces.mvc.exceptionhandler.DispatcherExceptionHandler 。 DispatcherExceptionHandler在JSF和Spring MVC之間提供了一個橋梁,使您可以像在其他任何Spring MVC應用程序中一樣在@Controller中使用@ExceptionHandler注釋。 用@ExceptionHandler注釋的方法實際上是通用的,并且可以具有非常靈活的簽名。 您可以直接處理異常或返回應呈現的視圖:
@ExceptionHandler public String handle(ExampleException e) {return 'redirect:errorpage'; }在Spring MVC上使用@ExceptionHandler批注是很自然的事情 ,并且有很多關于該主題的文章 。 希望現有的JSF開發人員將發現Spring MVC編程風格是標準JSF的一種有吸引力的替代方案。
請查看本系列的其他文章 ,如果您想檢查異常處理代碼,那么“ org.springframework.springfaces.exceptionhandler”和“ org.springframework.springfaces.mvc.exceptionhandler”軟件包是一個很好的起點。 。
參考: Phil Webb博客博客中我們JCG合作伙伴 Phillip Webb的Spring和JavaServer Faces集成:異常處理 。
翻譯自: https://www.javacodegeeks.com/2012/07/spring-jsf-integration-exception.html
jsf集成spring
總結
以上是生活随笔為你收集整理的jsf集成spring_Spring和JSF集成:异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: jcmd:一个可以全部统治的JDK命令行
- 下一篇: 关于王者荣耀防沉迷以及各种实名认证
