javascript
涉及CDI和JSF的过期对话的定制错误页面
自上次寫博客以來已經有一段時間了。 我一直在考慮寫一些技術博客,但最終卻忙于其他事情。 上周,在Coderanch論壇上進行了非常有趣的討論。 甚至更有趣,因為它涉及JBoss。
熟悉Java EE Web應用程序的開發人員會知道,Web應用程序部署描述符(web.xml)允許您指定當服務器拋出特定異常(類)或錯誤代碼時容器將顯示的“錯誤頁面”,網絡請求。 這是一個簡短的示例:
足夠簡單–分別為特定的錯誤代碼和異常類型定義的幾個自定義錯誤頁面。 所有這些都很好。 當前,在開發Web應用程序時,越來越多的編程模型和框架出現在人們的視野中。 CDI和JSF就是其中一些。 CDI具有范圍的概念(例如:請求范圍,會話范圍,應用程序范圍,對話范圍)。 我們不會詳細介紹它們的含義和使用時間,但讓我們考慮一下此博客中的對話范圍,因為這正是促使該博客的論壇主題中有關討論的內容。
因此,CDI允許多個請求成為“對話范圍”的一部分。 對話具有“開始”和“結束”,兩者都可以由應用程序管理。 當應用程序涉及JSF時,所有對話(id)都會自動傳播到JSF請求。 除了明確的對話開始/結束界限外,對話也可能超時。 涉及對話已結束或超時的請求將遇到異常。
因此,我們知道CDI對話范圍有一些背景。 因此,讓我們考慮一種情況,當引發“不再存在的對話”異常(可能是由于超時)時,應用程序希望呈現美觀的頁面。 我們已經看到了如何為錯誤頁面配置編寫一個web.xml,它很簡單:
<web-app> ... <!-- A custom error page for exception type org.jboss.weld.context.NonexistentConversationException --> <error-page> <exception-type>org.jboss.weld.context.NonexistentConversationException</exception-type> <location>/my-foo-bar-exception-page.html</location> </error-page> ... </web-app>很簡單。 org.jboss.weld.context.NonexistentConversationException是異常類類型,當會話超時時會拋出該異常類(請注意,我們假設Web應用程序依賴于Weld作為CDI規范實現庫)。 上面的配置工作正常。 拋出org.jboss.weld.context.NonexistentConversationException時,將顯示my-foo-bar-exception-page.html。 但是,現在讓我們考慮,就像我們應用程序的其他部分一樣,我們希望在錯誤頁面中包含JSF。 因此,讓我們將錯誤頁面指向映射到JSF servlet的URL模式:
<web-app> ... <!-- A custom error page for exception type org.jboss.weld.context.NonexistentConversationException. Notice the "nocid" parameter being passed to make sure that the non-existent conversation id isn't passed to the error page --> <error-page> <exception-type>org.jboss.weld.context.NonexistentConversationException</exception-type> <location>/my-foo-bar-exception-page.xhtml?nocid=true</location> </error-page> ... </web-app>請注意,我們將“ nocid”參數作為錯誤頁面位置的查詢字符串的一部分傳遞。 “ nocid”參數的值實際上并不重要,但是為了保持該值的邏輯性,我們在這里使用了“ true”值。 完成此更改后,您將開始注意到錯誤頁面(由JSF支持)現在可以正確呈現!
我們花了一段時間才在該論壇線程中找到此解決方案,因為它看起來很簡單,應該可以“正常工作”,但事實并非如此。這是我一直在談論的Coderanch論壇線程 。 感謝Greg Charles找出如何傳遞該nocid參數。
參考: Jaikiran My Wiki博客上來自JCG合作伙伴 Jaikiran Pai的涉及CDI和JSF的過期對話的自定義錯誤頁面 。
翻譯自: https://www.javacodegeeks.com/2013/01/custom-error-pages-for-expired-conversations-involving-cdi-and-jsf.html
總結
以上是生活随笔為你收集整理的涉及CDI和JSF的过期对话的定制错误页面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DDOS测量墙(测试ddos墙)
- 下一篇: linux的共享内存如何实现(linux