php cdi_涉及CDI和JSF的过期对话的定制错误页面
php cdi
自上次寫博客以來已經(jīng)有一段時(shí)間了。 我一直在想寫一些技術(shù)博客,但最終卻忙于其他事情。 上周,在Coderanch論壇上進(jìn)行了非常有趣的討論。 甚至更有趣,因?yàn)樗婕癑Boss。
熟悉Java EE Web應(yīng)用程序的開發(fā)人員會(huì)知道,Web應(yīng)用程序部署描述符(web.xml)允許您指定當(dāng)服務(wù)器拋出特定異常(類)或錯(cuò)誤代碼時(shí)容器將顯示的“錯(cuò)誤頁(yè)面”,一個(gè)網(wǎng)絡(luò)請(qǐng)求。 這是一個(gè)簡(jiǎn)短的示例:
足夠簡(jiǎn)單–分別為特定錯(cuò)誤代碼和異常類型定義的幾個(gè)自定義錯(cuò)誤頁(yè)面。 所有這些都很好。 目前,在開發(fā)Web應(yīng)用程序時(shí),越來越多的編程模型和框架出現(xiàn)在人們的視野中。 CDI和JSF就是其中一些。 CDI具有范圍的概念(例如:請(qǐng)求范圍,會(huì)話范圍,應(yīng)用程序范圍,會(huì)話范圍)。 我們不會(huì)詳細(xì)介紹它們的含義以及何時(shí)使用它們,但是讓我們考慮一下此Blog中的對(duì)話范圍,因?yàn)檫@正是促使該Blog的論壇主題中的討論內(nèi)容。
因此,CDI允許多個(gè)請(qǐng)求成為“對(duì)話范圍”的一部分。 對(duì)話具有“開始”和“結(jié)束”,兩者都可以由應(yīng)用程序管理。 當(dāng)應(yīng)用程序涉及JSF時(shí),任何對(duì)話(id)都會(huì)自動(dòng)傳播到JSF請(qǐng)求。 除了明確的對(duì)話開始/結(jié)束界限外,對(duì)話也可能超時(shí)。 涉及對(duì)話已結(jié)束或超時(shí)的請(qǐng)求將遇到異常。
因此,我們知道CDI對(duì)話范圍有一些背景。 因此,讓我們考慮一種情況,當(dāng)引發(fā)“不再存在的對(duì)話”異常(可能是由于超時(shí))時(shí),應(yīng)用程序希望呈現(xiàn)美觀的頁(yè)面。 我們已經(jīng)看到了如何為錯(cuò)誤頁(yè)面配置編寫一個(gè)web.xml,它很簡(jiǎn)單:
<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>很簡(jiǎn)單。 org.jboss.weld.context.NonexistentConversationException是異常類類型,當(dāng)會(huì)話超時(shí)時(shí)會(huì)拋出該異常類(請(qǐng)注意,我們假設(shè)Web應(yīng)用程序依賴于Weld作為CDI規(guī)范實(shí)現(xiàn)庫(kù))。 上面的配置工作正常。 拋出org.jboss.weld.context.NonexistentConversationException時(shí),將顯示my-foo-bar-exception-page.html。 但是,現(xiàn)在讓我們考慮,就像我們應(yīng)用程序的其他部分一樣,我們希望在錯(cuò)誤頁(yè)面中包含JSF。 因此,讓我們將錯(cuò)誤頁(yè)面指向映射到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>請(qǐng)注意,我們將'nocid'參數(shù)作為錯(cuò)誤頁(yè)面位置的查詢字符串的一部分傳遞。 “ nocid”參數(shù)的值實(shí)際上并不重要,但是為了保持該值的邏輯性,我們?cè)谶@里使用了“ true”值。 完成此更改后,您將開始注意到錯(cuò)誤頁(yè)面(由JSF支持)現(xiàn)在可以正確呈現(xiàn)!
我們花了一段時(shí)間才在該論壇線程中獲得此解決方案,因?yàn)樗雌饋砗芎?jiǎn)單,應(yīng)該可以“正常工作”,但事實(shí)并非如此。這是我一直在談?wù)摰腃oderanch論壇線程 。 感謝Greg Charles找出如何傳遞nocid參數(shù)。
參考:在Jaikiran My Wiki博客上,來自我們的JCG合作伙伴 Jaikiran Pai的涉及CDI和JSF的過期對(duì)話的自定義錯(cuò)誤頁(yè)面 。
翻譯自: https://www.javacodegeeks.com/2013/01/custom-error-pages-for-expired-conversations-involving-cdi-and-jsf.html
php cdi
總結(jié)
以上是生活随笔為你收集整理的php cdi_涉及CDI和JSF的过期对话的定制错误页面的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超级玛丽安卓经典版(超级玛丽安卓)
- 下一篇: php cdi_异步CDI事件