什么是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

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

  1. java jsf_使用Java和JSF构建一个简单的CRUD应用

    java jsf 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. JavaServer Fac ...

  2. web.xml.jsf_面向初学者的JSF 2.0教程

    web.xml.jsf 1.什么是JSF? JSF是Java Server Faces的首字母缩写. 它是一种服务器端处理技术,它允许将服务器端代码嵌入到网页中. 由于可以将服务器端处理和渲染代码嵌入 ...

  3. web.xml.jsf_看一下即将发布的JSF 2.3 Push支持

    web.xml.jsf 如前几篇文章所述,下一版本的JavaServer Faces(Mojarra)已添加了许多增强功能. JSF 2.3计划于2017年与Java EE 8一起发布,但是您现在可以 ...

  4. eclipse开发jsf_在Eclipse上创建JSF / CDI Maven项目

    eclipse开发jsf 当我在研究JSF和CDI示例时,我认为提到创建JSF和CDI Maven项目所需的步骤会很有用. 您可以找到以下步骤. 工具类 默认情况下,M2E插件随附的Eclipse L ...

  5. java jsf_将Java 8日期时间API与JSF和Java EE 7结合使用

    java jsf 如果您将Java 8与Java EE 7一起使用,则在尝试利用某些Java 8新功能时可能会遇到一些怪癖. 一个这样的怪癖是,默认情况下,新的Date-Time API不适用于许多J ...

  6. web.xml.jsf_使用JSF 2.2功能来开发可滚动,可延迟加载的Ajax数据表

    web.xml.jsf 这次,我想与您分享我最近从JSF 2.2功能中学到的知识. 为此,我决定创建一个简单的ajax,可滚动,延迟加载的数据表. 请注意, 绝不这是相当大的库如Primefaces ...

  7. web.xml.jsf_使用JSF 2.0可以更轻松地进行多字段验证

    web.xml.jsf 开发应用程序表单时最常见的需求之一是多字段验证(或跨字段验证,但我没有使用此术语,因为当我将其放在Google上时,实际上得到了一些战后图片). 我正在谈论的情况是,我们需要比 ...

  8. jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

    jpa jsf 我们创建了这篇文章,将展示如何使用以下工具创建完整的Web应用程序:Tomcat7,带有Primefaces的JSF2(Facelets和Libraries)(具有AutoComple ...

  9. jpa jsf_完整Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分

    jpa jsf 托管豆 这篇文章是本教程第1部分的继续. 在" com.mb"包中,您将需要创建以下类: package com.mb;import org.primefaces. ...

最新文章

  1. Activity悬浮并可拖动(访悬浮歌词)
  2. 【Qt】数据库实战之QSqlTableModel模型
  3. ansible+heartbeatV2构建高可用群集
  4. mkdir: Permission denied: user=root, access=WRITE
  5. 读《写给大家看的设计书》
  6. 20172318 2018-2019-1 《程序设计与数据结构》第9周学习总结
  7. 基于centos6.5搭建solr服务器
  8. 最小生成树prim、
  9. Java面向对象之多态解析、final关键字
  10. 排序算法之 插入排序
  11. 局域网IP搜索小工具
  12. mac os 录屏快捷键_录制视频软件哪个好用?分享专业的录屏神器
  13. MYSQL学习心得6
  14. Adobe reader update 无法将数值disableexceptionchainvaliddation写入键/sofeware...请验证您对该有足够
  15. oracle remap语句格式,impdp 中的remap方式
  16. 坚定信念,追求自己的理想!让那些坏人去死把!!!
  17. 在excel里面怎么筛选出11位的手机号码?
  18. 什么是SSL协议,浅谈SSL协议。
  19. 趣店再次收到不合规通知函:市值不足2亿美元 面临退市危机
  20. Facebook广告投放5种技巧

热门文章

  1. P3312-[SDOI2014]数表【莫比乌斯反演,树状数组】
  2. 【模板】一维树状数组
  3. AtCoder Beginner Contest 176总结
  4. 闲来无事刷水题、简单博弈论专题、sg函数、洛谷
  5. 键值存储之外,Redis还有这些用法
  6. 部署shiro官方源码时,执行maven命令出错
  7. Java开发必须掌握的5种加密策略
  8. Class的getName、getSimpleName与getCanonicalName的区别
  9. 如何将HBuilder中的项目Push至Gitee中!
  10. Gradle 简单使用