什么是jsf_为什么应该避免JSF

什么是jsf

长期以来,对我而言,JSF只是另一个我不太在乎的Web框架。 这改变了。 在被迫使用了几个月之后,我认为几乎在所有情况下这都是主要的项目风险。 在这里,我介绍作出这一裁决的理由。

UI和处理逻辑的纠缠不清。 官方教程声称以下有关JSF的好处 :

Java Server Faces技术的最大优点之一是,它为Web应用程序的行为和表示提供了清晰的分隔。

情况恰恰相反。 Facelets是JSF的首选呈现技术,乍一看就像普通的模板技术一样,例如老式的JSP或Thyme Leaf 。 但是,如果您近距离看,恐惧会变得很明显。 在构造HTML的同一位置,您还将逻辑放置在操作上应更新UI的哪些部分。 我的书中明显违反关注点分离原则。

更好的是, 立即属性可以改变服务器端的生命周期! 如果这还不够,则可以根据使用的标签以不同的方式进行处理。 你不能做这样的事情。

它尝试抽象您不能抽象的内容。 除了一些奇怪的边缘情况外,Web应用程序的客户端和服务器位于完全不同的计算机上,并通过某种网络隔开。 由此得出一个简单的事实:客户端与服务器之间的通信缓慢且不可靠。 JSF试图抽象化客户端和服务器的分离。 它以难以控制的方式处理后端上的所有内容,从而在客户端和服务器之间进行疯狂的通信。 结果是,由于使用了JSF,各种故障场景都将突然出现。 对我来说,最烦人的就是这个:如果您打开一个JSF页面,比方说一个简单的搜索页面,等待一个小时,然后单击“提交”按钮,您将得到一个异常,因为服务器端状态已过期。 WAT? 为什么平凡的搜索页面的服务器状态没有任何意义? (是的,我知道您可以使用最新版本的JSF更改该行为,但是它仍然是JSF的设计工作方式。)尽管所有人都从EJB中学到了知识:如果您想对事实进行抽象,如果应用程序有两个部分,是否在同一台计算机上运行,​​您必须假设它们不在同一台计算机上。 其他所有问题都隐藏了问题,直到问题变得如此之大,以至于您可以吃掉您的项目作为早餐。

使事情变得复杂和复杂,从一开始就很容易。 万维网的体系结构很简单 。 简单含义:它由一小部分概念组成,且交互作用有限。 这就是它取得如此广泛成功的原因。 对于初学者来说,如何使用它来实现某些功能也不是一件容易的事。 我确定我们大多数人都记得他们第一次尝试在没有会话状态的情况下实现购物车之类的功能。 但是几乎所有这些问题的解决方案都是众所周知的,也是众所周知的。 您所需要的只是一点阅读,而您所获得的是对如何解决此类问题的深刻概念理解。 同样,基础非常简单:您将请求发送到URL,并使用HTTP动词发送一些标头和内容。 然后,您将通过一些包含链接和标头的资源进行回复。 而且您在服务器会话中没有状态。 使负载平衡和故障转移相当简单。 使可添加书签的网址变得无关紧要。 使您的网站可零成本搜索。 使您的网站易于访问。 允许用户根据需要使用其后退按钮,历史记录和标签。 拥有精美的网址变得微不足道

将其与JSF的实时周期模型进行比较:用户提交请求的页面将与服务器端的模型同步,然后验证,转换,生成和处理提交的值。 如上所述,事物发生的顺序以及发生的一切都由隐藏在伪装为标记的文档中的XML标签控制。 除了几乎没有人能完全理解所有这些内容之外( BalusC似乎是Interweb中唯一的一种 ),它对您的应用程序具有以下影响:URL变得丑陋。 您将看到来源资源的URL,而不是您正在查看的资源的URL,因此使这些URL像在膝盖上的门把手一样有用。 与缓存,故障转移,负载平衡等相同。

当然,您可以在这里使用一些约定以及那里的其他库来修复它。 当您从事物品破碎业务时,哪一种当然是最合理的选择,所以人们必须为修理它付费。 我个人更喜欢帮助解决实际问题。

阻碍可测试性:我不能说大多数框架,但可以将Spring MVC与JSF进行比较。 让我告诉你这一点:如果有人告诉你JSF可以很好地测试,那么他可能不知道自动测试。 使用JSF,您可以使用单元测试来测试后端bean。 您可以通过将应用程序部署到服务器上并使用Selenium来测试整个UI。 基本上就是这样。

万一您想知道还有什么可以测试:在浏览器中加载页面的静态版本并使用Selenium进行测试,以便测试客户端UI行为。 测试您生成的标记,而无需启动功能完备的应用程序服务器。 测试属性/参数到bean方法的映射。 在不引导整个应用程序的情况下测试您生成的标记。 使用Spring MVC以及可能使用许多其他合理的服务器端框架,而使用JSF,这一切都是完全可能的。

再说一次:我知道有许多问题的修复程序,但是最简单的修复程序是> 不要使用JSF

翻译自: https://www.javacodegeeks.com/2014/11/why-you-should-avoid-jsf.html

什么是jsf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 英语怎么读,MATLAB SPTooL

Image:114994698204558.jpgmatlabmatlab是矩阵实验室(matrix laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。matlab的基本数据单位是矩阵,它的指令表达式…

最全的C++面试题来啦!(来自各大一线互联网)

更多精彩,请点击上方蓝字关注我们!此面试题全部由成功就业学员提供,来自各大一线互联网企业,在此谢谢他们的贡献!1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,n…

drools。drools_使用Drools跟踪输出

drools。droolsDrools 6包含一个跟踪输出,可以帮助您了解系统中正在发生的事情,事物执行的频率以及多少数据。 这也有助于理解Drools 6现在是基于目标的算法,它使用链接机制链接评估规则。 有关此的更多详细信息: http://www.ja…

matlab 万年历,matlab时钟万年历 matlab时钟万年历(附word说明文档): 程序主要 联合开发网 - pudn.com...

matlab时钟万年历所属分类:图形图像处理开发工具:matlab文件大小:54KB下载次数:6上传日期:2018-08-24 21:54:23上 传 者:小小葡萄123说明: matlab时钟万年历(附word说明文档):程序主…

基于C++实现五子棋AI算法思想

更多精彩,请点击上方蓝字关注我们!今天我想要分享一下我做五子棋AI的思路。因为在做这个之前,我没有接触过任何像这种类似的东西。通过这一次,我也算是有所了解,我的思路也是来自很多网络上的博客,看了很多…

php通知多有人,PHP通知抑制;只有某些情况/方法

tl; dr – 在非常严格的环境中工作时,是否有一种有效的方法来管理PHP的错误报告级别,因为某些流程在不太严格的级别下会变得更容易?好的;首先,我不相信“错误抑制”是一个解决方案.我(有理由确定我)从未使用过 error suppress运算符,并且无意这样做.我利用set_error…

java代码初体验_第一次Java 8体验

java代码初体验像世界其他地方一样,我深深地爱上了Slack。 为什么? 原因很多,但主要的原因是它提供了一种围绕通讯而非工具真正构建SDLC流程的新方法。 您认为这些天哪个更常见,杂乱无章的机智团队在荒野中四处徘徊,尽…

C++学习 | 面试官:我们只想要这样的C++工程师

更多精彩,请点击上方蓝字关注我们!最近好多同学来找就就说,我想找 xxx 方向的工作,我怎么学习呀?我也不知道这个岗位的招聘要求是啥?这个很正常哈,主要是咱们平时很少去关注企业的招聘要求&…

matlab serial 38400,这个程序的波特率能帮我改到38400吗?

#include #include unsigned char tmp;unsigned int c0;sbit led1P2^0; //指示灯0sbit led2P2^1; //指示灯1sbit led3P2^3; //指示灯3void init(); //串口初始化void send(unsigned char a); //单字…

if else 工厂模式_没有IF-ELSE的工厂

if else 工厂模式面向对象语言具有非常强大的多态性功能,用于删除代码中的if / else或切换大小写。 没有条件的代码易于阅读。 在某些地方必须放置它们,其中一个示例是Factory / ServiceProvider类。 我敢肯定,您已经看到IF-ELSEIF的工厂课…

C语言开发推箱子游戏项目实战

C语言能做什么?相信学过C语言的各位都会有一个疑问,我们学了C语言到底可以做什么?或许有人会说做系统开发、驱动开发等等,但是这个感觉离我们好远,甚至于我们学C语言都仅仅是为了用程序做数学题,要不就是用…

dw php如何传递id参数6,[php] 我的微型论坛的简单教程[已完成]第6/8页

现在数据库中还没有数据,所以,我们运行首页,只显示“对不起,论坛尚在建设中……”。既然我们很希望看到结果,就往数据库中加几条数据吧!!当然,直接在MySQL客户端运行查询语句"i…

尺度不变性是指什么不变_不变性如何提供帮助

尺度不变性是指什么不变在最近的几篇文章中,包括“ Getters / Setters。 邪恶。 期。” , “对象应该是不可变的”和“依赖注入容器是代码污染者” ,我普遍将所有可变对象标记为“ setter”(以set开头的对象方法)。 我…

java prototype是什么,java设计模式-原型模式(Prototype)

定义原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是原型模式的用意原型模式的结构原型模式要求对象实现同一个可以“克隆”自身的接口,遮掩个就可以通过赋值…

vb使用字符串分隔字符串_为什么要使用字符串

vb使用字符串分隔字符串最近&#xff0c;我在一次培训课程中辅导初中生。 任务之一是编写一个类&#xff0c;该类可以根据某些字符串键使映射变形。 创建的初级用户之一的结果包含以下方法&#xff1a; void dwarwle(HashMap<String,Dwarwable> mapToDwarwle, String dw…

Windows 动态链接库 DLL 浅析

一、概念DLL&#xff1a;Dynamic Link Library&#xff0c;即动态链接库&#xff0c;这种库包含了可由多个程序同时使用的代码和数据。它是microsoft在windows操作系统中实现共享函数库概念的一种实现方式。其中windows中 一些作为DLL实现的文件有&#xff1a;ActiveX控件&…

图片大小 媒体大小自适应_自适应堆大小

图片大小 媒体大小自适应在改进测试平台以改进Plumbr GC问题检测器的同时 &#xff0c;我最终编写了一个小型测试用例&#xff0c;我认为这对于更广泛的读者来说可能很有趣。 我追求的目标是测试JVM在eden&#xff0c;survivor和Tenured空间之间如何分割堆方面的自适应性。 测…

如何优雅的激怒C/C++程序员

一、想知道怎么激怒C/C程序员及爱好者吗&#xff1f;那就来一起看看吧&#xff1a;C是一个编译很快&#xff0c;但运行很慢的语言。对此我不接受反驳&#xff0c;C我早就精通了。你问我需要多久才能精通&#xff0c;只要14天。前13天学C&#xff0c;最后1天看看面向对象就行。C…

java xml格式打包,maven项目打包xml没有被打包解决办法 ,mybatis的xml打包

在打maven包是遇见一个问题&#xff1a;打完包发现src/main/java中的的mapping没有被打包进去&#xff1b;原因主要是mapping目录里面的文件都是xml文件并不是.java文件&#xff0c;而maven打包默认的src/main/java的是Java文件&#xff0c;它不会打包里面的xml文件&#xff0c…

老司机找BUG指南,赶紧拿走。。

一.码畜&#xff1a;靠编译器帮自己查语法错误消灭笔误:编写适合程序员的键盘练习if (常量变量或表达式)使用goto接力超长的if,switch连续的if还是if elseif多个条件的组合:精心的排版多重括号的匹配条件编译各种const:不要纠结各种常量了&#xff0c;这个世界上唯一不变的就是…