Spring和JSF集成:MVC螺母和螺栓
- 向后兼容。 支持JSF 1.2涉及的工作太多,而Spring 3.1中出现了太多的好东西,可以忽略。
- MVC注释为王。
@RequestMapping
似乎是大多数人的首选方法。 让我们仅支持此功能,并将所有自定义注释保持在最低限度。 - 减少依赖性。 重用东西很好,但这是一个集成项目,因此集成越少越好。
考虑到这一点,我决定以Web Flow的org.springframework.faces.mvc.JsfView
类为灵感。 该类非常好用,因为它只处理MVC
的View
,而Model
和Controller
完全保留在Spring领域中。 JsfView
的唯一问题是缺少回发支持。 我们需要以某种方式检测对视图的初始请求和任何后续的JSF回发之间的差异。
由于Spring MVC具有非常灵活的架构,因此这是完全可能的。 我们可以在DispatcherServlet
注册多个HandlerMapping
和HandlerAdapter
bean。 为了支持JSF,我们需要在此链中的某个较高层来检测和处理回发,而将不是回发的所有内容以常规方式处理。 这是事件的一般顺序:
user dispatcher @controller| /some/request | ||-------------------->| maps to || |------------->| creates| | |------------> FacesView| | (/pages/file.xhtml)| | render || |-------------------------------->|| | [Delegate to JSF]| response |<--------------------------------||<--------------------|| || || /some/request || (postback) ||-------------------->| postback handler| |--------->|| | [Delegate to JSF]| response |<---------||<--------------------| || | |
回发处理程序有几个有趣的问题要处理。 1)我们怎么知道我们是回发。 2)我们如何知道要还原的视图。 显然,回发将是HTTP POST
操作,但是我们不能盲目地假设所有POST
都是JSF回发。 我们还需要知道要还原的XHTML文件,但是该文件基于最后一个请求的@Controller
做出的决定。
这两个问题的答案是编写我们自己的JSF ResponseStateManager
。 ResponseStateManager
是JSF状态管理基础结构的一部分,并负责读取和写入组件状态。 通常,JSF会将状态数据保存在HTTP会话中,并在页面内写入一个隐藏的表单字段,以便以后可以还原。 使用这种机制,我们可以为MVC编写一个附加字段,该字段的存在使我们知道我们有一个回发,而且该值还将使我们知道要还原的XHTML文件。
有了回发处理程序,我们现在可以充分利用Spring和JSF的优势。 我们可以使用@RequestMapping
批注来构建富有表现力的URL,并使用JSF组件来呈现复杂的网页。 如果愿意,我们甚至可以基于完全不同的技术为同一URL返回不同的视图(例如,通过检查HTTP标头,我们可能决定返回JSF页面或XML文档)。
如果要查看回发处理程序代码,可在此处获得 。 通常是将代码库移动的注意事项。
参考: 集成Spring和JavaServer Faces: JCG合作伙伴 Phillip Webb的 MVC 细节 在Phil Webb的Blog上 。
翻译自: https://www.javacodegeeks.com/2012/03/spring-jsf-integration-mvc-nuts-and.html
Spring和JSF集成:MVC螺母和螺栓相关推荐
- jsf集成spring_Spring和JSF集成:MVC螺母和螺栓
jsf集成spring 过去,我曾尝试将JSF与Spring MVC集成在一起,尽管我的第一次尝试成功了,但这远非理想. 这次,我决定做出一些关键决定来帮助我集中精力: 向后兼容. 支持JSF 1.2 ...
- Spring和JSF集成:转换器
使用任何Web框架时,都不可避免地需要将用户输入的数据从String为其他类型. 尽管Spring和JSF在设计和功能上确实有很大的不同,但它们都具有转换器策略来处理此问题. 让我们从春天开始. Sp ...
- Spring和JSF集成:异常处理
大多数JSF开发人员都会熟悉"发生错误"页面,当在他们的代码某处引发意外异常时,该页面就会显示. 该页面在开发时确实很有用,但对于生产应用程序通常不是您想要的. 通常,在用库存JS ...
- Spring和JSF集成:动态导航
通常,您的JSF应用程序将需要超越基本的静态导航并开始做出动态导航决策. 例如,您可能想根据用户的年龄重定向他们. 大多数JSF教程建议通过将命令的action属性绑定到支持bean来实现动态导航: ...
- Spring和JSF集成:导航
我希望这是有关我在Spring和JavaServer Faces之间提供深度集成的努力的一系列博客中的第一篇. 这里提到的所有内容都是"正在进行中的工作",因此,如果您签出代码,请 ...
- Spring和JSF集成:分页
处理大型数据集时,通常需要以分页格式显示数据. 分页是一个有趣的问题,因为它倾向于跨越应用程序的所有层,从视图层通过应用程序服务一直到对数据库的原始调用. 在获取分页数据时,有一些非常好的解决方案. ...
- Spring和JSF集成:选择项目
使用JSF,要使用组合框,列表框和复选框,您需要了解javax.faces.model.SelectItem类. SelectItem表示单个可选选项. 它既包含渲染所需的信息,又包含选择该项目时应绑 ...
- Spring和JSF集成:国际化和本地化
如果您正在开发针对多种语言的JSF应用程序,那么您可能很熟悉<f:loadBundle>标记. 即使您的应用程序不支持使用消息包的国际化仍然是一个好主意. 在<f:loadBundl ...
- jsf集成spring_Spring JSF集成
jsf集成spring Welcome to Spring JSF integration tutorial. JSF is a component based framework with grea ...
最新文章
- 谷歌开源新模型EfficientNet,或成计算机视觉任务新基础
- loadrunner,socket脚本总结
- Skype For Business 2015实战系列6:后端数据库安装CU6补丁
- 【数据结构与算法】之深入解析“灯泡开关”的求解思路与算法示例
- html发送qq邮件消息,Python3实现发送QQ邮件功能(html)_python
- java拷贝文件夹和删除文件夹
- mysql 客户端 csv_使用mysql客户端程序远程导出csv文件
- redis 集群常用命令
- 教科书级别的软件推荐
- 3d模型多怎么优化_硕士生金属3D打印斯特林发动机模型,使用3DXpert增长增材制造经验...
- MySQL原理与学习
- 大数据是让人幸福的科学
- c语言hypot函数,hypot()函数以及C ++中的示例
- linux win10双系统启动顺序,Windows 10 和 Ubuntu 20.04 双系统 GRUB2 默认启动项的更改...
- LRC歌词原理和实现高仿Android网易云音乐
- Python列表(list)的添加元素方法 append、extend、insert-------(超级详细)
- Python3 实现简易局域网视频聊天工具
- Unity3d-打飞碟工厂模式
- CentOS 7.0.1503
- [SCOI2010]传送带
热门文章
- jboss 配置上下文路径_为单个Web应用程序配置多个上下文根– JBoss
- junit注释_通过此注释改善您的JUnit体验
- grunt 插件_从Grunt测试Grunt插件
- tf/idf_Neo4j:带密码的TF / IDF(和变体)
- jar 、war、ear_在命令行上操作JAR,WAR和EAR
- r 数据框选子集_在带有组合框的值列表的下拉列表中显示显示属性的子集
- 穹顶灯打不出阴暗面_Java 8星期五:Java 8的阴暗面
- Istio的网络API解释了
- Java使用者的延期执行
- JSON的JUnit Hamcrest Matcher