javascript
Spring和JSF集成:异常处理
這兩個(gè)選項(xiàng)都不是Spring開(kāi)發(fā)人員的理想選擇, <error-page>元素往往過(guò)于簡(jiǎn)化,并且很難將Spring概念(例如依賴(lài)項(xiàng)注入)與自定義ExceptionHandler一起使用 。 幸運(yùn)的是,JSF和Spring都是這么一個(gè)非常可擴(kuò)展的框架項(xiàng)目 ,我一直在努力整合這些技術(shù)可以提供一些引人注目的替代品。
第一個(gè)可用選項(xiàng)允許ExceptionHandler被注冊(cè)為Spring Bean。 可以使用新的org.springframework.springfaces.exceptionhandler.ExceptionHandler接口,而不是使用現(xiàn)有的javax.faces.context.ExceptionHandler類(lèi)。 該接口非常簡(jiǎn)單,它定義了一個(gè)單一的handle方法,如果已經(jīng)處理了異常,則該方法應(yīng)該返回true 。 該接口使用泛型來(lái)限制所考慮的異常類(lèi)型。
public interface ExceptionHandler<E extends Throwable> {boolean handle(E exception, ExceptionQueuedEvent event) throws Exception; }當(dāng)JSF發(fā)生異常時(shí),將查詢(xún)實(shí)現(xiàn)ExceptionHandler接口的所有相關(guān)bean。 返回true的第一個(gè)處理程序?qū)ⅰ矮@勝”,隨后的處理程序?qū)⒉粫?huì)被調(diào)用。 如果需要對(duì)處理程序進(jìn)行排序,則可以使用org.springframework.core.Ordered接口或@Ordered批注。 當(dāng)然,既然異常處理程序是常規(guī)的Spring Bean,則可以使用所有標(biāo)準(zhǔn)的Spring功能,例如依賴(lài)項(xiàng)注入和AOP。
現(xiàn)在我們有了基本的異常處理程序掛鉤,我們可以繼續(xù)提供一些有用的實(shí)現(xiàn):
有時(shí),處理某些異常的最佳方法是僅顯示一條消息并保留在當(dāng)前屏幕上。 例如,假設(shè)搜索查詢(xún)范圍太廣時(shí)服務(wù)會(huì)拋出TooManyResultsException 。 一條簡(jiǎn)單的消息告訴用戶(hù)“使用更精確的條件重試”可能是唯一需要的異常處理。 org.springframework.springfaces.exceptionhandler.ObjectMessageExceptionHandler類(lèi)建立在將對(duì)象映射到消息的先前工作的基礎(chǔ)上。 在Spring MessageSource中包含一個(gè)帶有Exception的全限定名稱(chēng)的項(xiàng)作為鍵,如果拋出該異常,將顯示FacesMessage 。
com.mycorp.search.TooManyResultsException=Too many results found, please try again with more precise search terms您可以輕松地將任意數(shù)量的異常映射到消息,甚至可以使用消息字符串中的' {property} '占位符來(lái)引用異常的屬性 。 可以使用標(biāo)準(zhǔn)JSF技術(shù)(通常是<h:messages />組件)在屏幕上顯示消息 。
快速將異常映射到消息的支持很好,但是對(duì)于許多應(yīng)用程序來(lái)說(shuō),這還不夠,編寫(xiě)ExceptionHandler bean可能很快就變得很麻煩。 最后一個(gè)可選的是org.springframework.springfaces.mvc.exceptionhandler.DispatcherExceptionHandler 。 DispatcherExceptionHandler在JSF和Spring MVC之間提供了一個(gè)橋梁,使您可以像在其他任何Spring MVC應(yīng)用程序中一樣在@Controller中使用@ExceptionHandler批注。 用@ExceptionHandler注釋的方法實(shí)際上是通用的,并且可以具有非常靈活的簽名。 您可以直接處理異常或返回應(yīng)呈現(xiàn)的視圖:
@ExceptionHandler public String handle(ExampleException e) {return 'redirect:errorpage'; }在Spring MVC中使用@ExceptionHandler批注是很自然的選擇,并且有很多關(guān)于該主題的文章 。 希望現(xiàn)有的JSF開(kāi)發(fā)人員將發(fā)現(xiàn)Spring MVC編程風(fēng)格是標(biāo)準(zhǔn)JSF的有吸引力的替代方案。
請(qǐng)查看本系列的其他文章 ,如果您想檢查異常處理代碼,那么“ org.springframework.springfaces.exceptionhandler”和“ org.springframework.springfaces.mvc.exceptionhandler”軟件包是一個(gè)很好的起點(diǎn)。 。
參考: Phil Webb博客博客中我們JCG合作伙伴 Phillip Webb的Spring和JavaServer Faces集成:異常處理 。
翻譯自: https://www.javacodegeeks.com/2012/07/spring-jsf-integration-exception.html
總結(jié)
以上是生活随笔為你收集整理的Spring和JSF集成:异常处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 黎巴嫩是哪个国家(它是一个怎样的国家)
- 下一篇: 电脑如何连接交换机(电脑如何连接交换机上