jsf集成spring

大多数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

jsf集成spring

jsf集成spring_Spring和JSF集成:异常处理相关推荐

  1. jsf集成spring_Spring和JSF集成:MVC螺母和螺栓

    jsf集成spring 过去,我曾尝试将JSF与Spring MVC集成在一起,尽管我的第一次尝试成功了,但这远非理想. 这次,我决定做出一些关键决定来帮助我集中精力: 向后兼容. 支持JSF 1.2 ...

  2. jsf集成spring_Spring和JSF集成:国际化和本地化

    jsf集成spring 如果您正在开发针对多种语言的JSF应用程序,那么您可能很熟悉<f:loadBundle>标记. 即使您的应用程序不支持使用消息捆绑包进行国际化仍然是一个好主意. 在 ...

  3. jsf集成spring_Spring和JSF集成:动态导航

    jsf集成spring 通常,您的JSF应用程序将需要超越基本的静态导航并开始做出动态导航决策. 例如,您可能想根据用户的年龄重定向他们. 大多数JSF教程建议通过将命令的action属性绑定到支持b ...

  4. jsf集成spring_Spring和JSF集成:分页

    jsf集成spring 使用大型数据集时,通常需要以分页格式显示数据. 分页是一个有趣的问题,因为它倾向于跨越应用程序的所有层,从视图层通过应用程序服务一直到对数据库的原始调用. 在获取分页数据时,有 ...

  5. jsf集成spring_Spring和JSF集成:转换器

    jsf集成spring 使用任何Web框架时,都不可避免地需要将用户输入的数据从String为其他类型. 尽管Spring和JSF在设计和功能上确实有很大的不同,但它们都具有转换器策略来处理此问题. ...

  6. jsf集成spring_Spring和JSF集成:导航

    jsf集成spring 我希望这是有关我在Spring和JavaServer Faces之间提供深度集成的努力的一系列博客中的第一篇. 这里提到的所有内容都是"正在进行中的工作", ...

  7. jsf集成spring_Spring JSF集成

    jsf集成spring Welcome to Spring JSF integration tutorial. JSF is a component based framework with grea ...

  8. 15 三明治集成方法和混合策略集成方法

    三明治集成方法和混合策略集成方法 前言 三明治集成方法 混合策略集成方法 总结 前言 关于集成测试方法今天我们再学习两个方法,三明治集成方法和混合策略集成方法. 三明治集成方法 采用三明治方法的优点是 ...

  9. 14 集成测试方法之自底向上集成方法

    自底向上集成方法 前言 自底向上集成方法 前言 集成测试方法没有好坏之分,只有哪个更适合. 自底向上集成方法 自底向上集成方法是从调用的底层开始逐级的向上集成,每测试完一个族群就将其挂到上一层的模块上 ...

最新文章

  1. 诵经嘴巴机器人入驻蓬皮杜艺术中心,MIT艺术家出品,网友:看到的第一眼我就想歪了...
  2. 【转】Android 之最新最全的Intent传递数据方法
  3. 页面上有两个元素id相同,js中如何取值
  4. 【Servlet】ServletContext、ServletConfig对象学习、用户登录系统完善
  5. oracle vm virtualbox 无法安装mac,【总结】在VirtualBox上面安装Mac的注意事项
  6. C# 9.0 新特性之 Lambda 弃元参数
  7. 【kruskal】【倍增】严格次小生成树(P4180)
  8. NFC 验证平台搭建
  9. 数据库数据类型decimal理解
  10. sob攻略超详细攻略_2020云南旅游超详细必看攻略(附带云南美食景点攻略)
  11. MyBatis基础:MyBatis数据基本操作(2)
  12. Grunt-jsdoc生成JS API文档
  13. php 开启 pathinfo,Nginx + php-fpm 开启 PATH_INFO 模式
  14. CCS软件的安装教程
  15. mybaitis-plus 持久层高效开发, 懒人神器
  16. Exploiting Sample Uncertainty for Domain Adaptive Person Re-Identification
  17. 数学规划模型(三):整数规划模型
  18. 回归本心QwQ背包问题luogu1776
  19. proc_mkdir与proc_create
  20. 正反斜杠的区别_正斜杠( / )和反斜杠( \ )的区别

热门文章

  1. 漫画算法:判断2的乘方
  2. C++描述杭电OJ 2016. 数据的交换输出 ||
  3. 使用Servlet上传多张图片——Dao层(ProductInfoDao.java)
  4. mybatis简单案例源码详细【注释全面】——Utils层(MybatisUtils.java)
  5. JWT(JSON web token)
  6. React中BrowserRouter与HashRouter的区别
  7. 八皇后问题---回溯
  8. 安装docker遇到的坑 Could not resolve host: download.docker.com;
  9. 钟 docker讲解
  10. c遗传算法的终止条件一般_KDD比赛之遗传算法(举例理解)