我们都知道XPages基于JSF,或者可以说XPages是JSF标准的实现(implementation)之一。JSF从2004年的1.0到现在的2.0,已经经历了很大的变化和发展。XPages最初开发的时候JSF 1.2还没有推出,所以是以1.1为基础的。JSF在1.2之前的名声是很糟糕的,bug无数,性能低下。幸运的是,XPages在JSF 1.1之上做了很多改进,纠正了它的缺陷,实现了很多1.2甚至2.0的功能。本文就准备阐述这些改进。下面每一点都是针对JSF 1.1的缺陷,列述了JSF后续版本的变化和XPages的情况作为比较。
1.    不能直接在JSP页面里插入HTML 在1.2以前,JSF在视图上只能采用JSP。传统的JSP页面是由混合的HTML和Java语言标记组成的。JSP引擎先将页面转化成一个servlet,浏览器请求该页面时Java服务器运行servlet在响应流中生成HTML。而在JSF里,页面被划分成一个个控件,这些控件在一起组成一个树结构,相当于树干的最外层容器就是代表页面整体的视图。页面被请求时,Java服务器先载入和构造出组件树,然后按顺序每个组件生成(render)它的HTML代码。虽然原则上,JSF页面可以完全由控件组成,但是如果现有的服务器组件不敷应用,或者想要更精细地直接控制前台的HTML、JavaScript和CSS等内容,就仍然需要手工编写这些原始的前台代码。这里我们遇到一个问题,从前面可以看到传统的JSP页面发出原始HTML和JSF里由组件生成的HTML两个过程没有统一,在JSF页面发出HTML的过程中,前者在后者之前。这样分离的过程,会使浏览器获得的HTML与从JSF页面代码预料的HTML结构上有差异,可能引起显示和功能上的错误。为了把原始HTML包含到JSF组件树里,需将它们包装到<f:verbatim>标签中,这样做是很烦琐的。 JSF 1.2取消了JSP在JSF视图选择上的唯一性,并且允许直接在页面里插入原始HTML。JSF 2.0采用以XML写的facelet作为默认的视图技术。 XPages的页面用XML写成,并可以直接插入原始HTML。
2.    缺少视图效用域(view scope) JSF 1.1只包含了请求效用域(request scope)和会话效用域(session scope),这使得对同一个页面的多次提交之间共享数据不能简单完成,要借助隐藏输入元素,或者滥用会话效用域。 JSF 1.2没有改善。JSF 2.0增加了视图效用域(使用@ViewScoped标记)。 XPages补充了视图效用域,在服务器端JavaScript里可以直接使用viewScope,也可以在faces-config 里配置一个managed bean的managed-bean-scope为view。
3.    使用冒号作为HTML元件的ID分隔符 为了保证HTML元件ID的唯一性,JSF采用类似的命名空间的办法,在每个HTML元件的ID前逐层附加父元件的ID,例如view:_id1:callback2:image3。JSF 2.0以前这个分隔符都是冒号(:),因为冒号在CSS标识符(identifier)里是不能使用的,需要转义(escape),这就为写CSS时使用CSS的选择器(selector)带来不便,比如要给上面给出ID的元件编写CSS,就会有类似这样的代码:view\:_id1\:callback2\:image3 {}。 JSF 2.0中这个分隔符变得可以配置。 XPages里这个分隔符仍然是硬编码的无法配置。不过XPages里显示元件的CSS基本上都由设定对应的控件的属性和使用主题(theme)来自动完成。
4.    没有现成的(out-of-box)Ajax功能(feature) JSF 1.1和1.2都没有现成的Ajax功能。JSF 2.0则跟上了web 2.0的潮流。 XPages提供了有限的Ajax功能,比如为文本框的即时输入提示。

从JSF看XPages的优点的更多相关文章

  1. jsf简介

    JSF实现了基于web的以下三个梦想 1.java程序员不必顾虑HTTP的细节,可以按照原本熟悉的事件驱动模型来设计后台系统,并通过一个能担保数据类型无误的数据传递接口将后台系统与前台界面结合在一起. ...

  2. JSF开篇之Login案例

    开发环境:Myeclipse+JDK5+MyEclipse Tomcat+jsf2.2.8 JSF看起来和STRUTS还是有些像的,刚开始还是遇到一点问题:资源包的存放路径及文件访问路径. 开发Log ...

  3. Reactjs-JQuery-Vuejs-Extjs-Angularjs对比

    写在前面 前端越来越混乱了,当然也可以美其名曰:繁荣. 当新启动一个前端项目,第一件事就是纠结:使用什么框架,重造什么轮子? 那么,希望看完此篇,能够给你一个清晰的认识,或者让你更加地纠结和无所适从 ...

  4. [No00007D]2016-面经[上]

    面试常见问题: 题一:"请你自我介绍一下" 思路:1.这是面试的必考题目.2.介绍内容要与个人简历相一致.3.表述方式上尽量口语化.4.要切中要害,不谈无关.无用的内容.5.条理要 ...

  5. 浅析angular,react,vue.js jQuery使用区别

    前端越来越混乱了,当然也可以美其名曰:繁荣.当新启动一个前端项目,第一件事就是纠结:使用什么框架,重造什么轮子? PS:大牛留言讨论那么,希望看完此篇,能够给你一个清晰的认识,或者让你更加地纠结和无所 ...

  6. mount不是很熟悉 转载文章了解下 转自http://forum.ubuntu.org.cn/viewtopic.php?f=120&t=257333

    纯粹针对刚刚解封开包的新新手,老鸟们请自觉绕行,否则浪费你的时间你非要逼我做谋杀犯可不光我的事你还没地方说理去.如果你正好是个崭新的新手,就耐心的花点时间看看吧,至少大概看看,不要在一个陌生又黑暗的到 ...

  7. 【转】扫盲 同步利器、分布式网盘--BT Sync

    原文地址:http://program-think.blogspot.com/2015/01/BitTorrent-Sync.html先向大伙儿宣布个好消息——经过多位热心读者的大力支持,经过几天的努 ...

  8. 扫盲 BT Sync——不仅是同步利器,而且是【分布式】网盘

    先向大伙儿宣布个好消息-- 经过多位热心读者的大力支持,经过几天的努力,已经完成了"微软网盘"到"BitTorrent Sync"的迁移工作. 再次向这批热心读 ...

  9. 【Todo】LR-逻辑回归

    因为逻辑回归对于计算广告学非常重要.也是我们平时广告推荐.CTR预估最常用到的算法.所以单独开一篇文章讨论. 参考这篇文章:http://www.cnblogs.com/sparkwen/p/3441 ...

随机推荐

  1. Eclipse中的特殊注释:TODO、XXX、FIXME

    特殊注释: 1. TODO表示需要实现,但目前还未实现的功能 2 .XXX勉强可以工作,但是性能差等原因 3 .FIXME代码是错误的,不能工作,需要修复 TODO: + 说明:如果代码中有该标识,说 ...

  2. 一种开源的分布式消息系统Nats

    一种开源的分布式消息系统Nats 作者:chszs.未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 1.NATS介绍 NATS是一个开源的 ...

  3. Useful JVM Flags – Part 8 (GC Logging)

    The last part of this series is about garbage collection logging and associated flags. The GC log is ...

  4. "Your computer could not be joined to the domain. You have exceeded the maximum number of computer accounts you are allowed to create in this domain. Contact your system administrator to have this limit reset or increased."

    用一个普通的域帐号玩私有云的时候,遇到了如下的报错. "Your computer could not be joined to the domain. You have exceeded ...

  5. android 微信听筒无声

    Dual talk项目sim卡插在卡2时.微信听筒无声: 第三方APP在听筒接听语音时会固定去设audio_mode为incall,而不会去管以下是sim1还是sim2在位. 而speechdrive ...

  6. RNN(Recurrent Neural Networks)公式推导和实现

    RNN(Recurrent Neural Networks)公式推导和实现 http://x-algo.cn/index.php/2016/04/25/rnn-recurrent-neural-net ...

  7. Grid 拾遗

    *.GridSplitter属性是Grid面板的一个特性.(1)预留一行或一列,专门用于放置 GridSplitter对象,如果是行的话,把其Height 设置为 Auto,如果是列的话,把其 Wid ...

  8. Linux上传和下载之Xshell

    一.安装与授权 安装时候需要注意的是,选择 Free For Home/School选项进行安装,如下图所示安装成功后 二.上传 上传需要使用rz命令,如下图所示,第一次可能会提示你命令无效或者提示你 ...

  9. artTemplate 简洁语法版

    引用简洁语法的引擎版本,例如: <script src="dist/template.js"></script> 下载 表达式 {{ 与 }} 符号包裹起来 ...

  10. 15款不容错过的前端开发Javascript和css类库 - 2017版本~

    前端的JS和CSS类库日新月异, 在今天这篇介绍中,我们将精挑细选15款超棒的JS/CSS类库, 希望大家在开发过程中会觉得有帮助~ Core UI 基于Bootstrap4的一套UI类库, Core ...