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.mzph.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…