| http://www.sqlsky.com/ |
|
|
我的一个客户不知道该选用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。