昨天我看到了一个关于Java Server Faces 2.0的演示文稿,虽然我目前是一个快乐的ASP.NET MVC / jQuery开发人员,但它看起来确实令人印象深刻。我最喜欢JSF的是大量支持AJAX的UI组件,这些组件似乎比ASP.NET MVC更快,特别是在AJAX重型站点上。集成测试看起来也很不错。
由于演示文稿只强调了JSF的优点,我也想听听另一方面的意见。
所以我的问题是:
答案 0 :(得分:455)
答案 1 :(得分:52)
在与JSF合作5年后,我认为我可以加2美分。
两个主要JSF 缺点:
我想到的次要缺点:
<ui:remove>
需要语法正确的内容,无论如何都要解析。
isRendered()
。
别误会我的意思。作为一个组件框架,版本2中的JSF非常好,但它仍然是基于组件的,并且总是会...
请看看Tapestry,Wicket的低人气和经验丰富的JSF开发人员的低热情(更有意义的是)。 相比之下,看看Rails,Grails,Django,Play的成功!框架 - 它们都是基于行动的,不要试图隐藏网络上的程序员真实请求/响应和无状态性。
对我而言,这是JSF的主要劣势。恕我直言JSF可以适合某种类型的应用程序(内联网,表单密集型),但对于现实生活中的 web 应用程序来说,这不是一个好方法。
希望它可以帮助某些人选择与前端有关的选择。
答案 2 :(得分:24)
想到一些缺点:
总结一下:使用JSF保存的时间,从避免编写JSP / servlet / bean样板代码开始,你将花费x10来使其扩展并完全按照你的要求进行操作希望它能做到。
答案 3 :(得分:18)
对我来说,JSF 2.0的最大缺点是不仅是JSF的学习曲线,而是为了让它做有用的工作而必须使用的组件库。考虑一下您所处理的规格和标准数量惊人,以确保精通:
现在,一旦完成,您就可以继续使用专有规范,即您将在此过程中选择的组件库和提供程序库:
不要忘记容器!以及所有这些配置文件:
所以 - 这样做很容易吗?当然,只要您想要做的只是最简单的交互的最基本的网页,JSF 2.0是“简单的”。
简单地说,JSF 2.0是当今软件领域中存在的最复杂,最麻烦的混合技术混合体。我想不出任何我宁愿使用的东西。
答案 4 :(得分:12)
所以简而言之,我的缺点是:复杂性,不是非常顺利的开发进度,错误,不灵活。
当然也有优点,但那不是你问的。无论如何,这是我对框架的经验,其他人可能会有不同的意见,所以最好的方法是尝试一段时间,看看它是否适合你(只是更复杂的东西 - 不是天真的例子 - JSF真的在那里闪耀:)恕我直言最好的用例JSF是业务应用程序,如CRM等......
答案 5 :(得分:11)
“JSF将输出您无法控制或更改的视图层HTML和JavaScript,而无需进入Controller代码。”
实际上,JSF为您提供了灵活性,您可以使用标准/第三方组件,也可以创建自己的组件,您可以完全控制所呈现的内容。使用JSF 2.0创建自定义组件只需要一个xhtml。
答案 6 :(得分:9)
我们用JSF开发了一个示例项目(这是一个为期三周的研究,所以我们可能会失去一些东西!)
我们尝试使用核心jsf,如果需要组件,我们使用PrimeFaces。
该项目是一个带导航的网站。单击菜单时,应通过ajax加载每个页面。
该网站有两个用例:
我们发现:
ajaxComplete
完成ajax时执行一些客户端脚本,我们发现PF 4已经实现了自己的ajax事件。我们有一些jQuery组件,我们需要更改他们的代码。如果您将上述示例更改为非Ajax 项目(或至少减少ajax项目),您将不会遇到很多上述问题。
我们将研究总结为:
JSF在完全ajax基础网站上效果不佳。
当然,我们在JSF中发现了很多很好的功能,这些功能在某些项目中可能非常有用,所以请考虑您的项目需求。
请参阅JSF技术文档以查看JSF的优势,在我看来,JSF的最大优势是来自@BalusC的完整和巨大的支持; - )
答案 7 :(得分:9)
我根本不是Java Server Faces专家。但恕我直言,主要的缺点是它的服务器端。我厌倦了学习和使用服务器端Web表示层框架,如ASP.NET Web Forms,ASP.NET MVC,Java Server Faces,Struts,php框架和ruby on rails框架。我告别了所有人,我向Angularjs和TypeScript问好。我的表示层在浏览器上运行。如果由运行php或ASP.NET的Windows IIS提供服务,或者它是由运行在Linux上的Apache Web服务器提供服务,则无关紧要。我只需要学习一个适用于所有地方的框架。
只是我的两分钱。
答案 8 :(得分:6)
评论我最近几个月的Primefaces / JSF经历:
JSF避免编写javascript的承诺变成了编写更多的javascript,而不是使用Primefaces - 并且javascript来修复Primefaces破坏的内容。
这是一个时间下沉 - 除非你再次使用“现成的”东西。当与Selenium合作时,也非常丑陋(Primefaces)。这一切都可以完成 - 但同样 - 只有那么多时间。
如果您正在与UX /设计团队合作并且需要快速迭代UI,那么一定要避免这种情况 - 您可以通过学习jquery /编写直接HTML来节省时间 - 或者查看react / angular。
答案 9 :(得分:5)
对我来说,JSF的最大缺点是对以编程方式(动态)生成的页面的支持不足 如果要从java代码动态构建页面(创建页面组件模型)。例如,如果您正在使用WYSIWYG网页构造函数。通常不提供此用例的充分文档。有很多方面你需要进行实验,开发速度很慢。许多事情根本无法实现。但一般来说它可能以某种方式破解它 好的是,它在JSF的哲学或架构中不是问题。它根本没有详细说明(据我所知)。
JSF 2带来了复合组件,它应该使组件开发变得容易,但它们对动态(程序化)构造的支持非常差。如果您克服了动态复合组件构造的安静复杂且几乎未记录的过程,您会发现如果将较少的复合组件嵌套得更深,它们会停止工作,抛出一些例外。
但似乎JSF社区意识到了这个缺点。正如你从这两个错误中看到的那样,他们正在研究这个问题
http://java.net/jira/browse/JAVASERVERFACES-1309
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-599
至少在我们谈论规范的情况下,JSF 2.2的情况应该会更好。
答案 10 :(得分:1)
JSF有许多优点,问题是处于劣势,让我在其上添加几点。
在实施Web项目的实际场景中,您需要密切关注以下因素。
您是否有足够的带宽来容纳初始学习曲线?
您的团队中是否有足够的专业知识可以审核JSF 东西由开发商生产?
如果您的答案是“否”&#39;对于这些问题,您最终可能会进入不可维护的代码库。
答案 11 :(得分:0)
JSF只有一个缺点:在开始“JSF”开发之前,你应该清楚地了解Web开发,核心java和前端架构。
如今“新”JavaScript框架只是尝试复制/粘贴“JSF”基于组件的模型。
答案 12 :(得分:0)
在所有“主流”框架中,如Spring MVC,Wicket,Tapestry等,Java EE及其复合组件的JSF是最精细的表示层和面向组件的技术。与HybridJava提供的解决方案相比,它有点麻烦和不完整。