昨天,我看见介绍Java服务面临的2.0这看起来真正令人印象深刻,尽管我目前快乐ASP.NET 软级的开发。我最喜欢的关于JSF是大量的阿贾克斯-启用的用户界面组件,这似乎要使发展速度远远超过与ASP.NET 视,尤其是在阿贾克斯-重点。一体化测试看上去很不错了。

由于演示只强调的优势,JSF,我想听听另一面。

所以我的问题是:

  • 有哪些主要缺点Java服务面临的2.0?
  • 什么能让一个JSF的开发考虑使用ASP.NET 视而不是JSF?
有帮助吗?

解决方案

JSF2.0缺点?老实说,除了相对的陡峭的学习曲线的时候你没有一个坚实的背景知识 基本网络开发 (HTML/CSS/JS,服务器方对客户的侧,等等)和 基本Java Servlet API (请求/回应/届会议转发的/重新定向,等等),没有严重的缺点。JSF在其目前的释放仍然需要摆脱的负面形象,它获得了在早期年龄段,其间有若干严重的缺点。

JSF1.0(March2004)

这是最初的释放。这是堆满了错误的两个核心和绩效领域的你不想知道。你拒绝服务始终没有工作,你会直观地期望。你作为开发商将很难远离哭泣。

JSF1.1(2004年)

这是该修正的释放。业绩还是没有多大改善。还有一个重大缺点:你不能联HTML在JSF页完美无缺。所有普通HTML获得呈现 之前 JSF组树。你需要换所有普通的香草 <f:verbatim> 标签,使他们获得包含在JSF组树。虽然这是因为每次的规范,这已经收到了很多批评。也参看a.o. JSF/客户端:为什么它不是一个好主意混合JSF/客户端与HTML tags?

JSF1.2(May2006)

这是首次释放的新的JSF发展团队的领导通过Ryan Lubke.新的团队做了很多伟大的工作。还有变化的规格。主要变化是改善查处理。这不仅完全脱离JSF从JSP,使人们可以使用不同的看法技术比JSP,但它也允许开发内联普通HTML在JSF页没有烦与 <f:verbatim> 标记。另一个主要焦点的新的团队是提高的性能。在太阳JSF参考执行1.2(这是代号 Mojarra 由于建立1.2_08,围绕2008年),几乎每一个建立了运用(主要的)的性能改进下一个通常的(次要)错误修正。

只有严重的缺点的JSF1.x(其中包括1.2)是缺乏一个范围之间 请求届会 范围、所谓的 谈话 范围。这迫使开发商的理想有隐藏的输入元素,不必要的数据库查询和/或滥用的会议的范围,每当一个希望保留最初的模型数据在随后的请求,以便成功地进程验证、转换、模型的变化和行动调用更复杂的webapplications.疼痛能够软化通过采用一个第3方图书馆保留必要的数据在随后的请求样 MyFaces战斧 <t:saveState> 组件, Boss缝 对话的范围和 MyFaces乐团 对话框架。

另一个缺点HTML/CSS纯粹主义者是JSF使用结肠 : 为ID分隔符保证独特性HTML元素 id 在产生HTML输出,特别是当一个组件是重新使用多次在图(模板,迭代分等)。因为这是一个非法的性格在CSS标识符,你会需要使用 \ 逃跑的结肠CSS选择,导致丑陋的,奇怪的选择喜欢的 #formId\:fieldId {} 甚至 #formId\3A fieldId {}.也参看 如何使用JSF产生HTML元ID结肠":"在CSS选择? 但是,如果你不是一个纯粹主义者,也读 默认情况下,JSF产生无法使用身份证,这不符合css的一部分网页的标准.

此外,JSF1.x没的船舶,Ajax设施。不是一个真正的技术缺点,但由于Web2.0炒作在这段期间,它成为一个功能缺点。 Exadel 是早期介绍Ajax4jsf,这是彻底的开发期间的年并且成为核心的一部分 Boss RichFaces 组成的图书馆。另一组成部分图书馆运具有内置的Ajax权力以及众所周知的一个 借助该.

大约一半的JSF1.2的一生,一个新的基于XML查技术是介绍: 客户端.这种提供巨大优势,上述JSP,特别是在区域的模板。

JSF2.0(2009年)

这是第二次主要发布,与阿贾克斯如时髦词。有很多技术和功能的变化。JSP是替代客户端的默认景的技术和客户端扩大有能力创造定义成分使用纯XML(所谓 复合成分).也参看 为什么客户端是优JSP作为查定义的语言,从JSF2.0起?

阿贾克斯的权力分别介绍在的味道 <f:ajax> 组件其中有很多相似之处Ajax4jsf.批注和《公约》在配置增强了 详细 faces-config.xml 文件尽可能多的。此外,默认命名的容器ID分隔符 : 成为了可配置的,因此HTML/CSS纯粹主义者能呼吸了所有你需要做的是把它定义为 init-paramweb.xml 的名称 javax.faces.SEPARATOR_CHAR 并保证不使用的字符自己在任何地方的客户身份证,例如 -.

最后但并非最不重要的是,一个新的范围是介绍, 范围。它消除了另一个主要的JSF1.x缺点如以前。你刚才宣布的豆 @ViewScoped 为使对话的范围,而不烦的所有方面保留的数据在随后的(对话)的请求。一个 @ViewScoped 豆会住只要你随后提交和航行到同样的观点(独立的打开浏览器tab/窗!), 同步或异步(Ajax).也参看 之间的差异视和请求的范围在管理豆如何选择正确的豆范围?

虽然几乎所有的缺点JSF1.x被消除,有JSF2.0具体错误,这可能会成为一个搅局者.的 @ViewScoped 失败的标签处理程序 由于一个鸡蛋的问题,在部分国家保存。这是固定在JSF2.2和向后移植在Mojarra2.1.18.还 通过自定属性,如5 data-xxx 不是的支持。这是固定在JSF2.2通过新的透元素的属性特征。进一步的JSF执行Mojarra有 它自己的问题.相对,他们中的很多有关 有时候直观的行为 <ui:repeat>, , 新的部分国家节约执行情况不好实施闪范围.他们大多是固定在一个Mojarra2.2.x版本。

周围的JSF2.0时间, PrimeFaces 介绍、基于能力和技.它变成了最受欢迎的JSF组件库。

JSF2.2(2013年)

引入JSF2.2,HTML5被用来作为口号,即使这是从技术上讲只是支持在所有的年龄较大的JSF的版本。也参看 次面临2.2和html5的支持,为什么XHTML仍在使用.最重要的新的JSF2.2功能是支持定义成分的特性,兹开一个世界的可能性,例如 定义无表团无线电按钮.

除了执行特定错误和一些"令人讨厌的小东西"如无法注入EJB在一个验证器/转换器(已经固定在JSF2.3),有的是不是真的主要缺点在JSF2.2的规范。

基于组件视vs请求基于软

有些人可能选择这一主要缺点的JSF是,它允许非常小的微粒度的控制产生HTML/CSS/JS。那不是JSF自己,那只是因为它是一个 基于组件 视的框架,不是一个 请求(行动)的基础 视的框架。如果有高度的控制HTML/CSS/JS是你的主要要求当考虑视的框架,然后你应该已经不是一个组件的基于软框架,但在请求基于软框架喜欢 软弹簧.你只需要考虑到,你必须写在所有这HTML/CSS/JS样板自己。也参看 之间的差异要求视和视成分.

参见:

其他提示

经过5年的工作JSF,我认为我可以增加2分。

两个 主要的JSF 缺点:

  1. 大的学习曲线。JSF是复杂的,这只是正确的。
  2. 它的 组件 性质。基于组件的框架试图隐藏的真正性质的网络,这是一个巨大数量的并发症和灾害(如不支持取得JSF内几乎是5年)。
    恕我直言躲在HTTP请求/回应的开发是一个巨大的错误。从我的经验,每一个组成部分为基础的框架增加了抽象的网络的发展,并抽象的结果,不必要的开销和较高的复杂性。

缺点,来我的心灵:

  1. 通过默认ID的对象是由其父母的身份证,例如form1:button1.
  2. 没有简单的方法,以释出不正确的页的片段。标记 <ui:remove> 需要在语法上正确的内容,其中分析了。
  3. 低质量的第3次缔约方组件,例如不检查 isRendered() 内部 processXxx() 方法之前继续进行。
  4. 纳入小&煎是很难的。
  5. 没发挥好其余部分。
  6. 不是那么容易UX设计师,因为准备使用的组件具有它们自己的CSS的风格,这需要复盖。

不要误会我的意思。作为一个部件的框架JSF在第2版是很好的,但它仍然是基于组件,并将永远是...

请看看在低流行的挂毯、检票和低热情经验丰富的JSF开发人员(什么是更有意义的).和对比之下,看一看对成功的轨道,技术发展的看法,Django、玩!框架-他们都是基于行动并不试图隐瞒从程序员 真正的请求/回应无国籍性质 该网络。

对我来说这是主要的JSF的缺点。恕我直言JSF可能适合某些类型的应用程序(内联网,形成密集型),但是对真实生活中 申它不是一个良好的路要走。

希望这可以帮助别人与他/她的选择,关于前端。

一些缺点出现在脑海中:

  1. JSF是一个部件的框架。这个具有固有的限制, 有与遵守 组件的模型。
  2. 据我所知JSF仅支持员额,所以如果你想得到的地方你有 做一个普通的servlet/JSP。
  3. 大部分试图提供抽象在域喜欢 关系数据库,前端 JavaScript,许多时候,这些 抽象是"漏"的,非常难以调试。
  4. 这些抽象可能是一个良好的起点为小型开发人员或个人不舒服的一个特别领域(例如前端JavaScript),但是非常难以优化业绩,因为有若干层的参与,大多数人使用它们的有小小的理解是什么引擎盖下。
  5. 该模板机制,通常用于JSF什么都没有做网desigers的工作。所见即所得的编辑对JSF的原始和在任何情况下,你的设计师会给你HTML/CSS,你必须花很多时间转换。
  6. 事情就像EL表达不是静态检查和两个编译器和IDEs不是做一个好的工作,在查找错误的,所以你结束了错误,你必须赶在运行时间。这可能是现为动态语言喜欢红宝石或PHP,但是,如果我必须承受的纯粹膨胀的生态系统,我要求输入我的模板。

综上: 时你会保存与JSF,从避免写JSP/servlet/豆样的代码,只花了它x10使它的规模和不正是你想要它做的。

我最大的缺点的JSF2.0是学习不仅JSF,但件图书馆,你必须使用以获得这样做有益的工作。考虑令人震惊的数目的规格和标准的你必须处理的真正精通:

  • HTML在各种各样的化身。不要假装你不需要知道它。
  • HTTP--的时候,你不能找出什么你要打开萤火虫。你需要知道这一点。
  • CSS--喜欢还是不喜欢。它不是那么糟糕真的而且有一些很好的工具,有至少一个。
  • XML--JSF很可能将第一个地方使用的名字空间,以此程度。
  • Servlet规范。你迟早会进入呼吁的方法,在这个包。除此之外,你必须知道你的客户端获取变成XHTML或什么的。
  • JSP(主要是这样你知道为什么你不需要它在JSF)
  • JSTL(再次,主要是为了应对与传统框架)
  • 表达的语言(EL)在其各种各样的形式。
  • 写,JavaScript,或任何其他你想称呼它。
  • JSON-你应该知道这甚至如果你不要使用它。
  • 阿贾克斯。我会说JSF2.0一份体面的工作的隐藏从你但你还是需要知道是怎么回事。
  • DOM。和如何浏览器中使用它。看到的写法。
  • DOM事件--的一个主题都通过本身。
  • Java持久性建筑(访问用户)就是如果你想要你的应用程序有任何后端数据的基础。
  • Java本身。
  • JSEE而您是在它。
  • 下文依赖注射规格(CDI)和它如何发生的冲突与和使用与JSF2.0
  • JQuery-我想看看你拿着它。

现在,一旦你完成了你可以获得与专有的规范,即件库,提供图书馆,你将拿起一种方式:

  • PrimeFaces(我的部件库的选择)
  • RichFaces
  • MyFaces
  • 借助该
  • EclipseLink(我的访问用户提供商)
  • 休眠
  • 焊接

不要忘记的容器!和所有那些配置文件:

  • 我们(2、3等)
  • Boss
  • Tomcat

因此--这是使得它很容易吗?当然,JSF2.0是"很容易"只要所有你想要做的是最基本的网页,与最简单的相互作用。

简单地说,JSF2.0是最复杂和繁琐的大杂烩的粘在一起的技术,以此作为存在的软件宇宙的今天。我不能想到什么我宁可使用。

  1. 没有经验的开发商通常将创建的应用程序是痛苦的缓慢并且代码将是很丑陋的和难以维护。它看似简单的开始,但实际上需要一些投资中学习如果你想要写良好的程序。
  2. 至少在开始,你会经常"停留"在某些问题,并将花费更多的时间阅读balusc员额在互联网上比实际工作:)一段时间后,它将越来越少的,但它仍然可以令人讨厌。
  3. 更讨厌当你发现,问题不是因为你缺乏认识/了错误,但实际上是一个错误。Mojarra是(?) 相当的越野车,另一个层的组成,增加了更多的问题。Richfaces是最大的一块垃圾软件曾经写:)不知道它是如何现在的版本4。我们Primefaces这是更好的,但你仍然会遇到的错误或欠缺的功能,尤其是与更多的外来组成。现在你将需要支付Primefaces更新。所以我要说的是它的车,但其获得更好,尤其是后2.2版本固定的一些问题与规范。框架变得更成熟,但仍然远非完美(也许myfaces更好的?).
  4. 我找不到它特别是灵活的。通常,如果你需要的东西非常非常自定义,也没有分,不,-这会有点痛苦。我再次谈话从平均开发的观点-这一最后期限,快速阅读教程,和搜索的计算器的时候被卡住,因为没有时间来学习如何这真的工作:)往往某些成分似乎具有"几乎"你需要什么,但是不完全的,有时你可能会花太多时间,使它做你想要的东西:)需要小心谨慎,在评估如果它能够更好地创建你自己的或酷刑现有的组成部分。实际上,如果你正在创造的东西真的很独特,我不会推荐JSF.

因此,在短期,我的缺点将是:复杂性,不是很顺利发展方面取得进展,越野车,不灵活。

当然也有优点,但这不是你的问。无论如何这是我的经验,框架的其他可能具有不同的意见,所以最好的方法是只是试用一段时间来看看它对你有(只更复杂的东西-不是幼稚的例子-JSF真正的亮点有:)恕我直言,最好使用情况JSF是商业应用程序,如Crm等...

"JSF将输出的看层HTML和JavaScript,你无法控制或更改没有进入控制器码。"

实际上JSF给你的灵活性,可以使用标准/第三方分或创建你自己,你有充分的控制是什么渲染。它只是一个xhtml你需要为你定制的组成与JSF2.0.

我们开发了一个样本项目的JSF(这是一个为期三周的研究,所以我们可能已经失去了一些东西!)

我们尝试使用核jsf,如果一个组件是需要我们使用PrimeFaces.

该项目是一个网站导航。每个页面应载入经过阿贾克斯在菜单点击。

该网站有两个用例:

  1. 一页有一个电网。该网是载入通过的ajax,并应支持进行排序和寻呼
  2. 一个三步骤向导页。每一页都有客户的侧验证(为简单的验证)和服务器侧ajax基验证(用于复杂的验证).任何服务器除外(从业务层)应显示同一页面上的向导不导航到下一页。

我们发现:

  1. 你需要使用一些黑客从omniFaces使JSF视国家固定的。JSF状态被破坏时,包括网页,通过阿贾克斯在各方。这似乎是一个错误,在JSF和可能被固定在下一个版本(不2.3).
  2. JSF的流动是不正常工作,与阿贾克斯(或者我们不能让它工作!) 我们尝试使用primeface导的组件,而不是但是验证客户似乎不支持,并意味着虽然这不是标准的JSF的流动标准。
  3. 当使用一些jQuery部件,如jqGird,你需要载JSON的结果,然后建议您使用纯servlet,JSF会做什么你。所以如果你使用这些种类的组成,你的设计不适合在JSF.
  4. 我们尝试做一些客户脚本时,ajax完成 ajaxComplete 我们发现,公共财政4已经实施的其自己的ajax事件。我们有一些jQuery件,我们需要改变他们的代码。

如果你改变上述样品 非阿贾克斯 项目(或至少较少的ajax项目)你就不会遇到许多上述问题。

我们总结我们的研究为:

JSF不是工作以及在一个全面的ajax基础的网站。

当然,我们找到很多不错的功能在JSF这可能是非常有用的,在一些项目,因此考虑项目的需要。

请参看JSF的技术文件,审查JSF的优点,并在我所见的最大优点的JSF,是完整和巨大的支持,从@BalusC;-)

我不是一个Java服务器上面的专家。但恕我直言,主要的缺点是,它的服务器的一侧。我厌倦了学习和使用服务器的端网络的介绍层框架喜欢ASP.NET 网形式,ASP.NET 视、Java服务面、支柱,php框架和红宝石上轨框架。我说过再见到他们所有的人和我说你好来对人们的生活产生了重要和稿.我的介绍层运行上的浏览器。我不要紧,如果它是由Windows IIS running php或ASP.NET或者如果它是由一个Apache网络服务器上运行Linux。我只需要了解的只是一个框架,工作无处不在。

只是我的两个美分。

对我来说最大的缺点的JSF是穷人的支持程(动态)产生页。
如果你想要构造你的网页(创建页面组成模型)动态地从爪哇的代码。例如,如果你的工作上所见即所得的网页构造。适当的文件使用这种情况一般不提供。有许多点,你必须试验和发展是安静的缓慢。许多事情,只是没工作你会怎么期望。但一般可能破解它以某种方式。
好事是,这不是问题在理念或建筑的JSF.它不是简单地阐述不够(尽我知道)。

JSF2所带来的复合成分,它应该作组分发展容易的,但是他们支持动态(方案)建设是非常差的。如果你们克服安静的复杂和几乎无证进程的动态复合成分建筑,你会发现,如果你窝几合成的组件很少深入他们停止工作,把一些例外情况。

但似乎JSF社会认识到这个缺点。他们在这方面的工作正如你可以看到这两个错误
http://java.net/jira/browse/JAVASERVERFACES-1309
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-599

情况应该更好地与JSF2.2至少,如果我们谈论的是规范。

在谈到我的最后几个月Primefaces/JSF的经验:

  • 如果你可以使用的组件"现成的",我猜测它不是可怕的。
  • 然而,它没有发挥好作为你的步骤之外,并需要定制用户界面。-例如,我们需要使用的Twitter的引导我们的项目。(不primefaces引导).
    • 现在我们的网页的工作如下:
      • 网页载荷。
      • 用户相互作用与Primefaces有ajax功能
      • 引导的javascript绑定打破
      • 我们运行额外的javascript重新绑定的一切

承诺的JSF避免写javascript变成编写更多的javascript比我们会的,如果不使用Primefaces-这javascript是解决什么Primefaces的休息时间。

这是一个时间沉-除非你再次使用"现成的"东西。还真丑(Primefaces)当具有的工作硒。它都可以做--但是再次--只有这么多的时间。

绝对避免这个如果你的工作与UX/设计团队和需要迅速迭代UI-你可以节省时间通过学习级编写的直HTML--或在做出反应/角的。

JSF具有许多优点,问题上的缺点,让我补充几点。

在实际情况实现一个网络项目在一个时间框架需要保持关注以下因素。

  • 你有足够的高级成员在你的团队,他们可以表明最好的 控制适用于每一情况?
  • 你有没有带宽,以容纳最初的学习曲线?

  • 你有足够的专业知识,在你的团队,他们可以审查JSF
    东西产生的,由开发商?

如果你的答案是"否"的问题,你最终可能会在一个非可维护的代码。

JSF只有一个缺点:在开始之前"JSF"发展的你应该清楚地了解网站的发展,核心java和前端体系结构。

现在"新的"JavaScript框架只是试图复制、粘贴"JSF"的组成部分的基于的模型。

在所有的"主流"的框架,如簧视,检票口,挂毯等, JSF的Java EE与其合成的组件是最详细阐述介绍层和组件的技术提供的。这是一个有点烦琐和不完整的比较方案提供的HybridJava。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top