首页 > 开发 > 综合 > 正文

选择JSF不选Struts的十大理由

2024-07-21 02:14:20
字体:
来源:转载
供稿:网友
中国最大的web开发资源网站及技术社区,

我的一个客户不知道该选用struts还是jsf。就像你预料的那样,我通常会问:这2中框架之间有什么区别?当然,除了我的这个客户外很多人都面临这样的选择。

总的来说,我建议在新项目中优先考虑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的能力。

有很多只能意会不能言传啊,比如renderer等。翻译得不好,大家可以去看看原文。原文出自davidgeary'sblog,原文地址为:http://jroller.com/comments/dgeary/weblog/

来源:http://blog.csdn.net/cqluojia/services/trackbacks/

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表