Spring和JSF集成:異常處理

大多數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.DispatcherExceptionHandlerDispatcherExceptionHandler在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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371845.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Altium 原理圖出現元件“Extra Pin…in Normal of part ”警告的解決方法

轉載于&#xff1a; http://blog.csdn.net/idoming/article/details/45575627 使用Altium Designer的時候編譯完后&#xff0c;只關注過錯誤沒有關注過警告&#xff0c;現在認真排查一下有哪些警告。 正在進行的項目原理圖編譯完成后提示標題中的警告信息。經過在網上搜索&…

XidianOJ 1087 浪漫的V8

題目描述 V8為了討女朋友開心&#xff0c;給lx承包大活后面那個水塘。為了籌集資金&#xff0c;V8偷偷地溜進了一座古墓&#xff0c;發現在他面前有金光閃閃的若干小箱子&#xff0c;里面全都是金粉&#xff0c;作為橫行于各種#&#xffe5;&場所的V8來說&#xff0c;辨別不…

curl php 模擬來源_php 使用curl模擬ip和來源進行訪問的實現方法

對于限制了ip和來源的網站&#xff0c;使用正常的訪問方式是無法訪問的。本文將介紹一種方法&#xff0c;使用php的curl類實現模擬ip和來源&#xff0c;訪問那些限制了ip和來源的網站。1.設置頁面限制ip和來源訪問server.php$client_ip getip();$referer getreferer();$allow…

堆棧C語言實現

堆棧的抽象數據類型描述&#xff1a; 類型名稱&#xff1a; 堆棧&#xff08;Stack&#xff09;。數據對象集&#xff1a; 一個有 0 個或多個元素的又窮表。操作集&#xff1a; 長度為 max_size 的堆棧 S ∈ Stack&#xff0c; 堆棧元素 item ∈ ElementType。stack creatc_sta…

woocommerce 分類到菜單_Woocommerce商店顯示分類

我是wordpress的新手, 所以如果我輸入的語言錯誤, 請仍然為我提供幫助。我想使用woocommerce顯示具有可變產品的商店, 我希望商店鏈接登錄頁面顯示具有該類別特征圖像的商店類別。我當前的商店頁面顯示所有產品, 并分頁到其他產品頁面, 我找不到所有產品的模板。當我進入wp-adm…

JBoss BRMS 5.3 –添加了業務活動監視(BAM)報告

自從JBoss BRMS 5.3產品發布以來&#xff0c;添加了jBPM 5 BPM組件的最常見問題之一是業務活動監視&#xff08;BAM&#xff09;和報告功能。 本文將引導您完成添加過程&#xff0c;但是請注意&#xff0c;在撰寫本文時&#xff0c;這不是產品的受支持功能。 在JBoss BRMS 5.3上…

Zookeeper開源客戶端框架Curator簡介

Curator是Netflix開源的一套ZooKeeper客戶端框架. Netflix在使用ZooKeeper的過程中發現ZooKeeper自帶的客戶端太底層, 應用方在使用的時候需要自己處理很多事情, 于是在它的基礎上包裝了一下, 提供了一套更好用的客戶端框架. Netflix在用ZooKeeper的過程中遇到的問題, 我們也遇…

【樹形DP】 HDU 2196 Computer

題意&#xff1a;求節點間的最大距離 先DFS一次 記錄下 每一節點的子樹下的最大距離&#xff08;DP[ u ] [ 0 ]&#xff09;和第二大距離&#xff08;DP[ u ] [ 1 ]&#xff09; 用DP[ v ] [ 2 ] 表示由v的父節點來的最大距離 再取DP[ u ] [ 0 ] 與 DP[ u ][ 2 ] 的最值 #inclu…

適當的Java堆大小的5個技巧

確定生產系統合適的Java堆大小不是一件容易的事。 在我的Java EE企業經驗中&#xff0c;我發現由于Java堆容量和調整不足而導致的多個性能問題。 本文將為您提供5個技巧&#xff0c;這些技巧可以幫助您確定當前或新生產環境的最佳Java堆大小。 這些技巧中的一些對于預防和解決j…

pythondocumentation是什么_怎樣閱讀Python官方文檔

如何閱讀官方Python文檔的初學者,因為他們沒有相關的經驗,學習語言通常是費時且勞動密集型和效果不是很好。下面簡要介紹如何閱讀官方文件。一旦你學會快速查詢官方文件,學習效率會提高很多文檔門戶。如何閱讀API文檔中內容標準庫,如何快速找到你想要的。第一種方法是先查找索引…

數據庫過大無法導入

導SQL數據庫結構數據時&#xff0c;如果數據是批量插入的話會報錯&#xff1a;2006 - MySQL server has gone away。 解決辦法&#xff1a;找到你的mysql目錄下的my.ini配置文件&#xff0c;加入以下代碼 max_allowed_packet500M wait_timeout288000 interactive_timeout 2880…

UVa 11475 - Extend to Palindrome

題目&#xff1a;給你一個字符串&#xff0c;在後面拼接一部分使得它變成回文串&#xff0c;使得串最短。輸出這個回文串。分析&#xff1a;KMP&#xff0c;dp。這裡利用KMP算法將串和它的轉置匹配&#xff0c;看結束時匹配的長度就可以。 因為串比較長。使用KMP比較合適&#…

構建Java Web應用程序時遵循MVC的三個步驟

步驟1 做 始終通過servlet / action bean處理URL&#xff08;POST表單&#xff0c;單擊鏈接等&#xff09;&#xff0c;而不是通過JSP處理 為什么 ActionBeans&#xff08;無論某些框架調用那些類&#xff09;&#xff0c;而servlet很少是控制器 用于處理用戶輸入。 JSP是專用于…

曝光原理_泰國精戈咖啡效果反饋 作用原理曝光

我的男人才三十五六&#xff0c;兩個人就開始分開睡了&#xff0c;自從咱們在一起以來&#xff0c;咱們的感情一向很好&#xff0c;這是十分調和的。但隨著年紀的添加&#xff0c;我逐漸發現他身體闌珊的越來越兇猛&#xff0c;夫妻生活方面硬度逐漸下降&#xff0c;時間也越來…

使用junit4測試Spring

Spring 提供便捷的測試&#xff0c;非常方便整合Junit 導入 spring-test-3.2.0.RELEASE.jar ---- 提供與Junit的整合 RunWith(SpringJUnit4ClassRunner.class) // 整合 ContextConfiguration(locations"classpath:applicationContext.xml") // 加載配置public class…

EasyCriteria –使用JPA Criteria的簡便方法

今天&#xff0c;我們將看到有關此工具的信息&#xff0c;該工具使使用JPA Criteria更加容易。 使用該庫的應用程序將在JPA實現中更加簡潔&#xff0c;易于使用和可移植。 在本文的結尾&#xff0c;您將找到要下載的源代碼。 什么是標準&#xff1f; 當前是創建動態查詢的最佳…

語言模擬蒲豐問題_R語言小數定律的保險業應用:泊松分布模擬索賠次數

原文鏈接&#xff1a;拓端數據科技 / Welcome to tecdat?tecdat.cn在保險業中&#xff0c;由于分散投資&#xff0c;通常會在合法的大型投資組合中提及大數定律。在一定時期內&#xff0c;損失“可預測”。當然&#xff0c;在標準的統計假設下&#xff0c;即有限的期望值和獨立…

THINKPHP

路徑 /index.php/home/...一般路徑應用或者U方法轉載于:https://www.cnblogs.com/lidepeng/p/6180631.html

JavaScript下的進制轉換

JavaScript下的進制轉換 //十進制轉其他進制 var num 99; console.log(十進制: , num); console.log(八進制:, (num).toString(8)) console.log(十六進制:, (num).toString(16)) console.log(三十二進制:, (num).toString(32))//其他轉十進制 var x 110; console.log(二進制&…

Spring Security第2部分–密碼加密,自定義404和403錯誤頁面

這是Spring安全站的第二部分。 在這篇文章中&#xff0c;我將向您展示如何使用MD5加密密碼以及自定義403和404狀態代碼錯誤頁面。 如果您尚未閱讀第1部分&#xff0c;請單擊 此處 。 因為我們在這里繼續第1部分項目。 下載已完成的項目&#xff1a; http : //www.mediafire.com…