自上次写博客以来已经有一段时间了。 我一直在考虑写一些技术博客,但最终却忙于其他事情。 上周,在Coderanch论坛上进行了非常有趣的讨论。 甚至更有趣,因为它涉及JBoss。

熟悉Java EE Web应用程序的开发人员会知道,Web应用程序部署描述符(web.xml)允许您指定当服务器抛出特定异常(类)或错误代码时容器将显示的“错误页面”,网络请求。 这是一个简短的示例:

<web-app>  ...  <!-- A custom error page for error code == 500 -->  <error-page>   <error-code>500</error-code>   <location>/my-foo-bar-500-page.html</location>   </error-page>   <!-- A custom error page for exception type org.myapp.foo.bar.MyException -->  <error-page>   <exception-type>org.myapp.foo.bar.MyException</exception-type>   <location>/my-foo-bar-exception-page.html</location>   </error-page>   ...  </web-app>

足够简单–分别为特定的错误代码和异常类型定义的几个自定义错误页面。 所有这些都很好。 当前,在开发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的过期对话的定制错误页面相关推荐

  1. php cdi_涉及CDI和JSF的过期对话的定制错误页面

    php cdi 自上次写博客以来已经有一段时间了. 我一直在想写一些技术博客,但最终却忙于其他事情. 上周,在Coderanch论坛上进行了非常有趣的讨论. 甚至更有趣,因为它涉及JBoss. 熟悉J ...

  2. Shiro session过期跳转到登录页面问题

    Shiro session过期跳转到登录页面问题 shrio的session过期后(工程重启或者用户长时间没进行任何操作),当客户端再次向服务端发起请求时,shrio会判断用户没有登录授权,然后对请求 ...

  3. ajaxsetup获取ajax的url_ajaxsetup,组合拦截器处理session过期,跳转登录页面

    当前位置:我的异常网» Ajax » ajaxsetup,组合拦截器处理session过期,跳转登录页面 ajaxsetup,组合拦截器处理session过期,跳转登录页面 www.myexcepti ...

  4. jsf如何通过按钮切换在同一个页面上的非公共部分显示不同的内容

    2019独角兽企业重金招聘Python工程师标准>>> 在jsf中,同一个页面上有公有的内容,也有非公有的内容,通过一个按钮进行切换来显示不同的内容(通过ajax实现):    前台 ...

  5. aspjpeg已过期_Persits.Jpeg.1错误’800a0004′ AspJpeg组件过期解决方法 - YangJunwei

    最近一直很郁闷,原来正常使用的论坛签名显示博客最新文章的小插件最近一直显示红X,也找不出原因,也就没有再纠结了. 今天在做东西的时候,需要给上传的商品图片加水印,检测发现AspJpeg 1.5组件安装 ...

  6. session过期跳转到登陆页面并跳出iframe框架的最简单方法

    为什么80%的码农都做不了架构师?>>>    <script>if (window.top !== window.self) {window.top.location ...

  7. JS设置Cookie过期时间(网上非常多错误的方法, expires结果差8小时)

    网上搜的方法都是错误的, 比如百度搜索前十都是复制粘贴如下代码: // 错误方式 function setCookie(name,value){var Days = 30;var exp = new ...

  8. jsf集成spring_Spring和JSF集成:异常处理

    jsf集成spring 大多数JSF开发人员都会熟悉"发生错误"页面,当在他们的代码某处引发意外异常时,该页面就会显示. 该页面在开发时确实很有用,但对于生产应用程序通常不是您想要 ...

  9. Spring和JSF集成:异常处理

    大多数JSF开发人员都会熟悉"发生错误"页面,当在他们的代码某处引发意外异常时,该页面就会显示. 该页面在开发时确实很有用,但对于生产应用程序通常不是您想要的. 通常,在用库存JS ...

最新文章

  1. 不用卷积也能生成清晰图像,用两个Transformer构建一个GAN
  2. oracle 重复的记录数,如何确定Oracle数据库表中重复的记录
  3. sharding分表后主键_分库分表【Sharding-JDBC】入门与项目实战
  4. 创业思考:做生意不是靠学历
  5. 请教有关网络管理的方法
  6. (html+css)静态小米闪购主页仿制
  7. 嵌入式单片机及外设(硬件)知识基础一
  8. 计算机网络信息安全风险评估准则,计算机网络信息安全风险评估准则及方法研究.pdf...
  9. flash加载脚本文件导致IE脚本错误 ,行53 ,字符3,缺少对象,代码0 , 怎么解决?
  10. 最好的Vim学习教程-Vim Adventures 全攻略(附彩蛋)
  11. 微信加密数据解密报错-41003
  12. Saruman‘s Army
  13. R16 NR CDRX
  14. 致小班:无论身处何方,一定要怀揣着一颗上进的心
  15. WPF中的3D Wireframe
  16. mPush实战笔记3安装zookeeper
  17. GNSS原理和应用的第二周作业
  18. sqlite3交叉编译
  19. Go语言-实现单链表反转算法
  20. 无人机/无人车仿真软件学习与实践---CoppeliaSim教程1---Win10/Win11下的安装

热门文章

  1. redis创建集群报错can‘t connect to node 192.168.163.203
  2. php cdi_Quarkus的其他(非标准)CDI功能
  3. jwt令牌_JWT令牌的秘密轮换
  4. java streams_使用JShell的Java 9 Streams API
  5. 机器学习java_如何开始使用Java机器学习
  6. 构建器模式_我喜欢构建器模式的三个原因
  7. 使用Spring Boot和Vue进行有益的开发
  8. jvm破坏双亲委派_破坏JVM
  9. javafx 示例_示例介绍:JavaFX 8打印
  10. 坚实原则:Liskov替代原则