长期以来,对我来说,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动词发送一些标头和内容。 然后您用一些包含链接和一些标题的资源进行回复。 而且您在服务器会话中没有状态。 使负载平衡和故障转移变得相当简单。 使可添加书签的网址变得无关紧要。 使您的网站可零成本搜索。 使网站易于访问。 允许用户根据需要使用其后退按钮,历史记录和标签。 拥有精美的URL变得微不足道

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

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

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

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

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

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

为什么应该避免JSF相关推荐

  1. JSF和Struts的区别概述

    据说JSF的主要负责人就是struts的主要作者,所以二者的相似点还是有很多的. 都采用taglib来处理表示层:在jsp页面中,二者都是采用一套标记库来处理页面的表示和model层的交互. 二者都采 ...

  2. 表现层框架Struts/Tapestry/JSF架构比较 [转]

    http://www.jdon.com/artichect/sjt.htm Struts/Tapestry/JSF是目前J2EE表现层新老组合的框架技术.从诞生时间上看,Struts应该比较早,使用得 ...

  3. jsf mysql_如何在Spring JSF MySQL应用程序中正确显示阿拉伯文?

    我使用Spring 3,JSF 2,MYSQL,Hibernate和Heidi SQL是数据库的GUI工具 我有一个阿拉伯字符的编码问题是阿拉伯语单词作为??????????插入到数据库中,并以相同的 ...

  4. AJAX+JSF组件实现高性能的文件上载

    一. 引言 基于浏览器的文件上传,特别是对于通过<input type="file">标签包含到Web页面来实现上传的情况,还存在较严重的性能问题.我们知道,超过10M ...

  5. 润乾报表JSF FORM 标签中使用填报表解决方案

     需求 润乾报表的标签需要在jsf页面中和其他填报控件一起使用,润乾报表负责展现录入部分数据,并且这部分数据和页面的其它控件的数据存在前台和后台的交互. 问题 润乾报表在前台会生成自己的form, ...

  6. JSF中的h:commandLink如何传递参数 三种取值比较

    声明本人刚学jsf三天 如有不足请指教.... 本人总结了三种取得参数的方法 这是jsf中的代码 <h:commandLink  action="#{}">       ...

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

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

  8. jsf登录注册页面_您将在下一个项目中使用JSF吗?

    jsf登录注册页面 上周有一篇很棒的stackoverflow博客文章,主题是" Javascript框架的残酷生命周期" . 这篇文章是关于Javascript UI框架(ang ...

  9. html jsf ajax blur,JSF和AJAX:隐藏网站的一部分,直到第一个Ajax请求

    我想创建一个页面,其中一些内容将在ajax请求后显示.这里是我的代码部分:JSF和AJAX:隐藏网站的一部分,直到第一个Ajax请求 Retrive object by id: You retrive ...

  10. JSF or PHP or ADF?!! :(

    最近要写一个WEB程序,PHP, JSF 2.0, ADF三种技术,考虑了半天都没确定用哪一种.三种都各有优缺点,真tm郁闷.

最新文章

  1. 2019-11-13 有趣的网站(持续更新)
  2. mysql windows乱码_小白楠--windows系统下mysql乱码
  3. Sales Volume Analysis PoC app test - environment setup finished
  4. Linux Distribution Timeline for 2010(Linux 2010 年发行版时间线/族谱/发展图)
  5. 在jsp页面里动态生成EL表达式的key
  6. window下打开tensorboard
  7. java string能存储多长_String 有多长?
  8. c++两数组合并算法
  9. I/O多路复用之epoll实战
  10. OpenCV 实现分水岭算法
  11. 深入理解jQuery中的事件冒泡
  12. 爬取行政区划(改版)
  13. 波导缝隙天线(一)[搬运]
  14. java免费浏览器,Java swing实现简单的浏览器源码免费分享
  15. RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
  16. C++可视化界面EasyX图形库的安装以及简单使用
  17. django问卷html,Django:动态问卷系统的Model设计
  18. [BZOJ]4491: 我也不知道题目名字是什么 线段树(差分)
  19. .net 大型药品进销存管理系统源码
  20. 软件测试面试总被拒怎么办?表姐把压箱底的面试秘籍交给了我,现在已经在上班了。

热门文章

  1. JS重写toString(),打印想要的值
  2. 历年安徽省二计算机考试题库,2010安徽省计算机等级考试试题 二级ACCESS最新考试试题库...
  3. myeclipse窗口布局控件任意_木辛老师的编程课堂:Python和Qt第2讲之布局管理初探(三)...
  4. c++ 凸包 分治算法_三维凸包
  5. 如何添加数据到session中
  6. 机器学习java_Java机器学习,第2部分
  7. java6 已安装更高版本_Java 10及更高版本的思考
  8. 连接堡垒机出现java环境_Java 8:长期支持的堡垒
  9. jboss使用_使用JBoss Cool Store的终极云零售指南
  10. javafx有布局管理器吗_JavaFX技巧17:带有AnchorPane的动画工作台布局