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

转载于:https://www.cnblogs.com/lxinxuan/archive/2006/11/08/554035.html

选择JSF不选Struts的十大理由相关推荐

  1. [转:作者: 出处:javaresearch ]选择JSF不选Struts的十大理由

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

  2. ibm cloud_使IBM Cloud成为您选择平台的十大理由

    developerWorks发布了许多有关如何使用IBM Cloud服务的技术内容 . 在本文中,我将为您所见过的所有技术内容添加一些变化,并为您选择IBM Cloud作为您选择的云平台的十大理由. ...

  3. 嫁给打CS男的十大理由(我就是哦)

    嫁给打CS男的十大理由 1.事业心 他可以为自己的爱好付出一切精力.将来,他也一定会有自己热爱的事业.而且,男人最性感的时刻之一,就是他专心致志做事的时候.所以,找一个机会在他全神贯注玩 CS 的时候 ...

  4. 购买IBM System x3650 M4十大理由

    多功能IBM System x3650 M4针对业务关键型工作负载(包括云计算.虚拟桌面和业务分析)将超凡的正常运行时间和高性能融为一体.此款强大的服务器提供了一种易于使用的节能智能型机架解决方案,其 ...

  5. 学习区块链的十大理由

    学习区块链的十大理由 技术发展迅速!如果你仍然在你的多维数据集中编辑Java代码或只是搞PowerBuilder,那么你可能只生活在过去.少数雇主的地方.现在的情况发生了很大变化.你需要领先一步,采用 ...

  6. python与php8-Python比php发展快的十大理由

    在过去的两年中,Python一直呈急剧上升的趋势.在后台开发中,PHP和Python是Web专家和开发人员最热门的两个选择. 选择Python代替PHP进行Web开发并不困难,但是我们有很多理由建议开 ...

  7. 学习Java的十大理由,益处太多了

    Java应该是软件开发同学最熟悉的一种开发语言,古老但很流行,再加上现在大数据发展形势一片大好,更让Java的魅力十足.Java是任何人都会掌握的最基本的编程语言之一,因此简单.然而,使用Java开发 ...

  8. 为什么服务器要选择 Linux,这里总结了 10 大理由

    从最近的统计数据可以看到,全球大量数据中心的服务器已经开始向基于 Linux Server 平台转移.相较 Windows Server 而言,Linux Server 提供了更多优势.包括 Goog ...

  9. PHP 败给 Python 的十大理由

    Python大法好! 作者 | myTectra,一家位于班加罗尔的技能开发公司. 译者 | 弯月 责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: 在过去的两年中,Pyth ...

  10. IT男青年应该献身文艺女青年的十大理由

    认识我的husband是在豆瓣上,那时候空虚寂寞冷,在某某文艺青年组发了个帖子,很隐晦的表达了自己在现实生活中的各种失意.迷茫和孤独.身为IT男的husband留了个言,说楼主要倾诉么,找我吧.虽然留 ...

最新文章

  1. python list去掉引号_最新的python面试题集170之三(基础性学习)
  2. MAVEN学习笔记-maven的获取和安装
  3. make changes to the open source project?
  4. CF1628A-Meximum Array【二分】
  5. Educational Codeforces Round 54 (Rated for Div.2)
  6. Win7怎么设置文件共享 Win7共享设置方法
  7. ffmpeg使用(多个帧合成视频)
  8. 【LeetCode】【HOT】142. 环形链表 II(快慢指针)
  9. 谁能制约云厂商滥用开源,谁来帮助开源软件作者?
  10. oracle系列(二)oracle体系结构和用户管理
  11. linux dhcp 获取ip地址能上网,设置静态ip地址则不能上网
  12. vue 获取安卓原生方法_H5-vue与原生Android、ios交互获取相册图片
  13. Java实现十字链表
  14. linux查看磁带大小命令,16条实用的Linux/Unix 磁带管理命令
  15. cp正在写入文件导致文件内容不一致
  16. 【BZOJ4379】[POI2015]Modernizacja autostrady 树形DP
  17. [译] 流量控制(TC)五十年:从基于缓冲队列(Queue)到基于时间戳(EDT)的演进...
  18. 干净卸载 Loadrunner  win7
  19. 画渐变色的C++代码
  20. eclipse国内镜像下载资源

热门文章

  1. 拓端tecdat|Matlab广义线性模型glm泊松回归的lasso、弹性网络正则化分类预测考试成绩数据和交叉验证可视化
  2. 双向链表的插入删除和遍历
  3. 卷积神经网络参数说明
  4. 基于堆叠式长短期记忆神经网络模型StackingLSTM的时间序列数据预测模型构建
  5. c++如何在两个.cpp文件中使用同一个全局变量
  6. linux闹钟命令,Linux基础命令一
  7. 区块链 Fisco bcos 智能合约(13)-Solidity的设计模式
  8. mybatis xml中大于、小于、if else的写法
  9. java提前多久显示,Java当前日期/时间比原始时间提前1小时显示
  10. linux系统设置软连接