`

选择JSF不选Struts的十大理由

阅读更多
总的来说,我建议在新项目中优先考虑JSF。虽然常常有一些商业上的因素迫使我们为现有的项目选择了Struts,而且那些解决方案还有待考验 ,但是,让我们面对一个事实:JSF比Struts好多了。

下面是我选择JSF而不选Struts的十大理由:
1.Components(组件)
2.RenderKits
3.Renderers
4.ValueBindingExpressions(值绑定表达式)
5.EventModel(事件模 型)
6.Extensibility(可扩展性)
7.ManagedBeans(DependencyInjection依赖注入)
8.POJOActionMethods
9.JSFisthestandardJava- basedwebappframework(JSF是javaweb应用程序的标准框架)
10.There"sonlyoneStruts(只有一个Struts)

10.There"sonlyoneStruts(只有一个 Struts)
Struts是一个开源产品,然而JSF是一个标准。这个细节常常被新的JSF学习者忽略,其实这是显而易见的,因为我们有多个JSF的 实现。虽然JSF还很不成熟,但是我们已经有了2个优秀的JSF实现可以选择:Sun的参考实现和Apache的MyFaces。另一方面,我们只有一个 Struts。

9.JSFisthestandard(JSF是标准)
JEE5.0要提供一个JSF的实现,这表明JSF不久将会无处不在 。这可能与你无关,但是和工具供应商密切相关。现在大概有50个javaweb应用程序框架,工具供应商不会情愿去支持一个特别的框架, 但是他们会毫不犹豫的去支持一个标准。而且不止供应商,开源项目也会迅速的聚集在JSF的四周,争先恐后的去实现相同的功能。比如说,直 到我们去实现本质上和Shale的Tapestry差不多的视图的时候,我才知道Facalets。(从长远来看,我相信这种冗余是件好事,会给我们带来好 处)

8.POJOActionMethods
Struts的行为是和Struts的API绑定在一起的,但是JSF的行为方法可以在POJPO中实现。 这意味着你不用在表单和模型对象之间实现一个多余的行为层。顺便说一下,在JSF里面没有行为对象,行为在模型对象中实现。但是也请注意 一点:如果你愿意你也可以生成与JSF独立的行为对象。在Struts里面,你有FormBean和ActionBean。FormBean包含数据而 ActionBean包含逻辑。OO狂会想去合并前2者,在Struts你办不到。但是在JSF中,你可以分开数据和逻辑,也可以合并到一个对象中, 一切由你决定。

7.ManagedBeans(DependencyInjection依赖注入)
和Spring一样,JSF也使用了依赖注入(DJ )(或控制反转(IoC))去实例化和初始化Bean。Struts的确为你生成了FormBean和ActionBean,但是JSF可以为你生成各种各 样的ManagedBean。

6.Extensibility(可扩展性)
这个很重要。JSF有6个对象实现了这个框架的大部分功能,而且你可以很 容易的用你自己的实现代替原有实现。比如你想加一个自定义参数在JSF表达式语言里面,或是添加一个自己的视图控制器以便于区分组件和 HTML。事实上Shale实现了上面的功能。如果你还没有满足,JSF提供了几个地方你可以轻松的控制JSF的生命周期。Shale给你的会更多。

5.EventModel(事件模型)
JSF的事件模型使你可以对值改变,动作,JSF生命周期阶段变换等作出反应。在JSF1.1中,那 些事件都是在服务器端处理的,这肯定是一个缺陷,好在JSF2.0计划支持客户端事件,拭目以待吧。

4.ValueBindingExpressions(值绑定表达式)
在Struts中,你负责把数据从Form传递到模型对象。你实现的Action 的execute方法是把Form作为一个参数。然后你再手动的把数据从FormBean里面取出放到模型对象里面。你要为应用里面的每个Form做这 些事情,然而在JSF里面,你只需像这样:#{model.property}就够了,其他的交给JSF来处理。

3.Renderers
你有看过 Struts的标签的源代码吗?它直接生成HTML。JSF组件标签什么都不生成,它和服务器上的一对component-renderer对应。Component维护组件 状态,rendered负责获得视图。重点是renderers是可插拔的,即你可以根据自己需求实现然后替代掉默认实现。比如说我在NFJS上面的Felix 谈话中举例说明了怎么去实现一个自定义的labelrenderer。你只需要配置你的renderer,JSF就会自动在你的应用程序里面使用他。

2.RenderKits
在几年前我曾经有份Struts咨询工作,我们必须同时支持浏览器和无线设备,非常痛苦。但是用JSF来完成那 个任务非常容易,因为你可以生成你自己的renderkit-为一种特定显示技术的renderers的集合-然后配置到JSF里面。

1.Components(组件)
组件是Struts和JSF之间最大的区别。就像Swing一样,JSF提供丰富的底层构件去开发组件然后添加到标准的 组件集。那些底层构件让你很容易的生成自己的组件并且和别人共享。现在我们到处都能看到自定义组件跳出来,比如说Oracle的ADF和 MyFaces,两者都提供了丰富的组件集,就像javascript日历,tree等等。当然,组件只是一部分。典型的是,组件都和一个独立的renderer对 应,这给我们带来了真正的好处(看第3条)。但是和JSF中的很多东西一样,你不一定要墨守成规。只要你愿意,你可以实现render自己的组 件,虽然这样你会失去给组件加入别的renderer的能力。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=562349

[点击此处收藏本文] 发表于 2005年12月26日 12:18 PM
<link rel="pingback" href="http://blog.csdn.net/love_yun/Services/Pingback.aspx"> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://blog.csdn.net/love_yun/archive/2005/12/26/562349.aspx" dc:identifier="http://blog.csdn.net/love_yun/archive/2005/12/26/562349.aspx" dc:title="[转:作者: 出处:javaresearch ]选择JSF不选Struts的十大理由" trackback:ping="http://tb.blog.csdn.net/TrackBack.aspx?PostId=562349" /> </rdf:RDF> -->
<iframe scrolling="no" frameborder="0" src="../../search_iframe.html" style="border: medium none ; margin: 0px; padding: 0px; width: 156px; height: 22px;"></iframe>
document.write("<img src=http://counter.csdn.net/pv.aspx?id=24 border=0 width=0 height=0>");
wangzx发表于2005-12-26 2:37 PMIP: 218.19.174.*
JSF 相对Struts而言,确实有可圈可点的地方,不过,在简单性方面,却还不如Tapestry。

综合而言,这些基于服务端的WEB框架在概念上始终不直观,要开发复杂、友好的WEB界面,还是会逐步淘汰出历史舞台的。

AJAX是一个很好的替代方案。如果你选择一个好的ajax框架的话,完全可能比JSF开发效率更高。

顺发表于2005-12-26 4:47 PMIP: 222.90.92.*
都在谈ajax,都在说替代现有框架,事实上连个完整性的概念都没有,jsf是基于mvc结构的实践沉淀,分量十足,如果它要被淘汰了,那么mvc就基本淡出web舞台,而ajax这些新奇之秀真的能顶住那么大的压力?

方成发表于2005-12-26 5:16 PMIP: 219.236.9.*
ajax在客户端的交互方面确实是有特别的地方.不信,你到http://www.fcsoft.com.cn 看看 eform自定义表单

rt发表于2005-12-26 6:52 PMIP: 219.142.237.*
狗屁,没成熟的东西,何必去当实验品.
几十个框架,前台展现又有什么大的分别?又有哪一个是你自己做的?
看看你的项目,基本功能实现了吗?权限做好了吗,流程实现了吗?安全性如何,效率如何,报表做得如何?这些与用了什么前台框架有关系吗

bokei发表于2005-12-26 8:49 PMIP: 59.42.153.*
AJAX不是万能的,只是一个表现层的技术,我想谁都不会把程序的主要逻辑放到大家拿个Notepad都能看到的地方。因此怎样把Ajax和各种框架结合是最重要的。所以要使用AJAX就需要借助于各种框架提供的AJAX支持,相信随着AJAX的发展,各种框架很快就会提供不同的解决方案。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics