Username: Password:

选择JSF不选Struts的十大理由
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


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

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

  下面是我选择JSF而不选Struts的十大理由:

  1.Components(组件)

  2.Render Kits

  3.Renderers

  4.Value Binding Expressions(值绑定表达式)

  5.Event Model(事件模型)

  6.Extensibility(可扩展性)

  7.Managed Beans(Dependency Injection 依赖注入)

  8.POJO Action Methods

  9.JSF is the standard Java-based web app framework (JSF是java web应用程式的标准框架)

  10.There’s only one Struts(只有一个Struts)

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

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

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

  7.Managed Beans(Dependency Injection 依赖注入) 和Spring相同,JSF也使用了依赖注入(DJ)(或控制反转(IoC))去实例化和初始化Bean。Struts的确为您生成了Form Bean和Action Bean,但是JSF能够为您生成各种各样的Managed Bean。

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

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

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

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

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

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

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅