Mojarra和MyFaces之间的区别

Cra*_*lus 48 jsf myfaces jsf-2 mojarra

我开始使用JSF2.0我使用了一个教程作为参考,但我有以下问题:

本教程只使用2个库:jsf-api.jar,jsf-impl.jar(但也有JSTL)从钻嘴鱼科项目.

我试图下载它们但似乎网站无法访问.所以我使用Apache MyFaces,但运行示例我必须添加8个罐子(commons-*,myfaces-*).
如果我使用MyFaces,为什么还需要更多的罐子?我是否应该更喜欢Mojarra?下载页面确实是JSF Mojarra

谢谢

Bal*_*usC 73

如果我使用MyFaces,为什么还需要更多的罐子?

因为这些commons-*依赖项未捆绑在MyFaces中.另一方面,如果你正在使用Apache.org中也使用这些commons-*依赖项的其他库,那么你最终会得到更小的总大小库.

注意应该是因为Mojarra 2.1.6可以使用单个JAR文件格式javax.faces.jar.


我是否应该更喜欢Mojarra

这是一个非争论.您应该了解JSF实现的强大和良好维护.

Mojarra的祖父,Sun JSF RI 1.0以及RI 1.1的早期版本都被令人讨厌的错误搞得一团糟.那一刻(2004-2006左右),MyFaces肯定是更稳定的选择.

从2006年初的1.1_02和1.2_02开始,新的Sun/Oracle JSF开发团队做了很多工作.不仅有错误修正,还有性能增强.在Mojarra 1.2生命周期的大约一半(大约在2007-2009),Mojarra是比MyFaces更好的选择.

由于JSF 2.0带有新的部分状态保存管理,MyFaces在性能方面是更好的选择,因为计算状态增量的方法不同且更有效,特别是在使用大型组件树时.Mojarra仅在2.1.22版本之后就赶上了.在2.0/2.1时间线期间,Mojarra jakarta.faces.jar在复杂/嵌套组合中只有严重的问题(ao破坏状态保存,只处理最后迭代的形式,失败<ui:repeat>等)和flash范围实现(初始实现完全不是防弹).MyFaces也有自己的一组错误,但它们是可管理的.

现在,使用JSF 2.2,人们不能事先说出哪一个更好.错误通常仅在以后暴露,并且稳健性只能在后果期间进行评估.只要选择你认为最好的任何实现.浏览他们的问题报告(MyFacesMojarra),了解以前修复的问题和当前未解决的问题.如果您遇到特定错误,请尝试使用这两种实现来排除其中一个.如有必要,报告以保持两种实施的整体质量.


下载页面确实是JSF Mojarra

他们的主页已被移动了好几次.目前(2017年9月)它位于https://javaserverfaces.github.io您也可以<f:ajax>在Maven Central找到库.您可以org.glassfish:jakarta.faces在GitHub中找到项目中的源代码.您可以eclipse-ee4j/mojarra在那里找到安装说明.


也可以看看:

  • 我不为Mojarra工作.我只是广泛使用Mojarra而且我是Mojarra的狂热追踪记者.我看不出应该改变什么.如果你已经在使用MyFaces,只要坚持使用它,除非你遇到一个特定的MyFaces特定的错误,这个错误在Mojarra中没有出现. (8认同)

lu4*_*242 45

答案来自我的博客:

http://lu4242.blogspot.com/2011/06/10-reason-why-choose-myfaces-core-as.html http://lu4242.blogspot.com/2012/05/understandingjsf-2-and-wicket html的

2013年7月更新:在JSFCentral查看2013年的系列文章和更新:

http://www.jsfcentral.com/articles/understanding_jsf_performance_3.html


在第一个视图中,两个JSF实现(MyFaces和Mojarra)都这样做,因为它们基于相同的标准.您可以从一个实现更改为另一个实现的事实是JSF标准规范质量的事实.

但是在底部有很多原因可以解释为什么MyFaces Core 2.x比Mojarra更好.注意我是MyFaces项目的提交者,所以我会在这里给出你的观点:

  • 很多问题已得到解决.仅在2.0.x分支从2.0.0-alpha到2.0.7它已经关闭了835个问题.这给出了社区在一段时间内提供了多少贡献和反馈的"原始"衡量标准.这是随时间内已结束问题的数字:2.0.0-alpha:274,2.0.0-beta:58,2.0.0-beta-2:41,2.0.0-beta-3:39,2.0.0 :51,2.0.1:148,2.0.2:77,2.0.3:63,2.0.4:23,2.0.5:27,2.0.6:29,2.0.7:5.

2012年5月更新: 2.1.0:47,2.1.1:6,2.1.2:84,2.1.3:9,2.1.4:74,2.1.5:7,2.1.6:35,2.1.7: 52

  • 社区代码:MyFaces社区非常重视有很多JSF知识的人.订阅用户和开发邮件列表是了解正在发生的事情,收到反馈并了解其他对JSF感兴趣的人的最佳方式.请参阅MyFaces邮件列表

  • 众所周知,Apache可以从Sun/Oracle中获取所有内容并使其更好.在这种情况下,MyFaces Core对部分状态保存,复合组件等进行了一些很好的优化!

  • MyFaces Core是OSGi友好的.当您需要对类加载进行更多控制时,它提供了一些SPI接口来处理特殊设置.

  • MyFaces Core与facelets 1.1.x有更好的兼容性!只需将org.apache.myfaces.REFRESH_TRANSIENT_BUILD_ON_PSS web配置参数设置为true,即可激活特殊模式.没有c:如果标签或c:forEach或ui:包括已经破坏了!2012年5月更新在MyFaces Core内部完成了一项改进算法,即使在使用facelets动态更新组件树时,也会减少部分状态.这个参数不再是必需的.

  • MyFaces还有其他项目(特立尼达,多巴哥,Tomahawk,ExtVal,CODI,Orchestra,PortletBridge RI ......),可以帮助保持代码调整,因为所有这些项目都是针对MyFaces Core进行测试的,如果有错误的话,那就是处理得更快.

  • 您可以使用svn签出并轻松构建任何MyFaces项目,因为它们都基于maven并且大多数IDE都提供maven支持.

  • Mojarra在当前时间(2011年6月)有一些与国家储蓄相关的讨厌的错误,MyFaces没有,因为它的实现完全不同.事实上,MyFaces部分状态保存算法提供了比Mojarra更好的与JSF 1.2状态保存的兼容性.但是请注意Mojarra的人正在努力解决这个问题,但要解决这个问题需要几个月,甚至几年.

  • 创新发生在MyFaces上.

2012年5月更新

请参阅本文10选择MyFaces Core作为Web应用程序的JSF实现的原因

想要在MyFaces,Mojarra和Wicket之间看到性能比较的人看起来理解JSF 2和Wicket:性能比较

更新2013年7月

比较扩展到包括其他框架,如Spring MVC,Tapestry,Grails 2和Wicket.请参阅JSFCentral上的文章:JSFCentral的2013年7月更新

  • @Kev看起来Kumar的博客是复制/粘贴.lu4242的博客和这个答案都预先约会了.请参阅http://meta.stackexchange.com/q/169699/1288上的讨论 (15认同)

Mic*_*rdt 9

我会说这没关系.

我最近使用Myfaces和Primefaces开始了一个JSF 2.0项目.上周,为了研究一个bug,我试图在Mojarra上运行它.所需要的只是交换JAR并删除web.xml中特定于Myfaces的条目 - 所有工作都没有任何问题.不可否认,这是一个不使用所有JSF功能的原型,但我对通过标准兼容性的兼容性演示印象深刻.

如果我使用MyFaces,为什么还需要更多的罐子?

  • myfaces-impl和myfaces-api JAR相当于Mojarra的jsf-impl和jsf-api.
  • 为方便起见,myfaces-bundle包含这两个,你需要这个或其他两个,而不是全部三个.
  • commons-*是包含有用的基本功能的库,用于处理集合,Java bean等否则必须重新实现(可能更慢并且有更多错误).许多其他项目也使用这些.


Ala*_*ect 5

我通常坚持使用Mojarra实现,除非有某些理由与其他东西一起使用.我使用Netbeans,因此最简单的方法是使用"默认"项目设置,该设置使用在GlassFish下运行的Mojarra.

最后我使用的是MyFaces,因为我正在考虑使用Tomahawk,从同一来源使用JSF实现似乎是合理的.不过我改为使用Primefaces而且在Mojarra下工作正常.

目前,似乎有很多开发正在进行JSF-2.0组件库上线.因此,您应该学习并能够在出现问题时在JSF实现之间切换.

MyFaces中有更多jar的原因是它具有比参考实现更多的功能.