昨天我看了一个关于Java Server Faces 2.0的演示,它看起来确实令人印象深刻,尽管我现在是一个快乐的ASP。asp.net MVC / jQuery开发。我最喜欢JSF的地方是它有大量支持ajax的UI组件,这使得开发比使用ASP要快得多。NET MVC,特别是在ajax较多的站点上。集成测试看起来也很不错。
由于这个演示只强调了JSF的优点,所以我也想听听其他方面的情况。
所以我的问题是:
Java Server Faces 2.0的主要缺点是什么?
什么会使JSF开发人员考虑使用ASP。NET MVC而不是JSF?
For me the biggest shortcoming of JSF is poor support for programmatically (dynamically) generated pages.
If you want to construct your page (create page component model) dynamically from java code. For example if you are working on WYSIWYG web page constructor. Adequate documentation of this use case in not generally available. There are many points where you have to experiment and development is quiet slow. Many things just don't work how you would expect. But generally its possible hack it somehow.
Good thing is that it's not problem in philosophy or architecture of JSF. It's simply not elaborated enough (as far as I know).
JSF 2带来了组合组件,这将使组件开发变得容易,但是它们对动态(编程式)构造的支持非常差。如果你克服了动态组合组件构造的复杂且几乎没有文档的过程,你会发现如果你把几个组合组件嵌套得稍微深一点,它们就会停止工作,抛出一些异常。
但是JSF社区似乎意识到了这个缺点。你可以从这两个bug中看到,他们正在研究这个
http://java.net/jira/browse/JAVASERVERFACES-1309
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-599
至少在谈论规范时,JSF 2.2的情况会更好。
评论我过去几个月的Primefaces/JSF体验:
如果你可以使用“现成的”组件,我想这并不可怕。
然而,当你走到外面并需要定制ui时,它就不能很好地发挥作用。-例如,我们需要在项目中使用Twitter的bootstrap。(不是primefaces bootstrap)。
现在我们的页面工作如下:
页面加载。
用户与具有ajax功能的Primefaces交互
Bootstrap的javascript绑定中断
我们运行额外的javascript来重新绑定所有内容
JSF避免编写javascript的承诺变成了编写比不使用Primefaces时更多的javascript——而javascript是用来修复Primefaces破坏的。
这是一个时间消耗器——除非你再次使用现成的东西。当不得不与Selenium一起工作时,也非常丑陋(Primefaces)。这些都是可以做到的,但是时间有限。
如果你和UX/设计团队一起工作,并且需要快速迭代UI,你可以通过学习jquery/编写直接的HTML来节省时间,或者查看react/angular。