我们都知道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. JUnit - 测试框架

    什么是 Junit 测试框架? JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量.JUnit 测试框架能够轻松完成以下任意两种结合: Ecli ...

  2. Reloading Java Classes 301: Classloaders in Web Development — Tomcat, GlassFish, OSGi, Tapestry 5 and so on Translation

    The Original link : http://zeroturnaround.com/rebellabs/rjc301/ Copyright reserved by Rebel Inc In t ...

  3. SQL:Oracle 目录

    ylbtech-Miscellaneos-SQL:Oracle 目录 Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据 ...

  4. 用Razor語法寫範本-RazorEngine組件介紹

    最近剛好有要寫寄Email的程式,在代碼中寫HTML覺得很呆,抽出代碼外寫到txt或html檔當範本,由程式執行時在載入檔案時用Regex換關鍵字又覺得不夠好用,而且因為有時會有要判斷一些條件,就會寫 ...

  5. EntityFramework6 快速入门教程【转】

    https://www.cnblogs.com/wujingtao/p/5401113.html 不得不说EF在国内实在是太小众,相关的技术文章真实屈指可数,而且很多文章都很旧了,里面使用的版本跟如今 ...

  6. ISP图像处理&&相机系统

    如何理解 ISO.快门.光圈.曝光这几个概念? 摄影基础篇——彻底弄清光圈.快门与ISO 理解这三个参数各自都是如何控制进入的光线量: 快门速度一般的表示方法是1/100s.1/30s.2s: 小的“ ...

  7. C语言头文件的使用(转载)

    C语言头文件的使用 ——by janders 转载请注名作者和出处,谢谢! C语言中的.h文件和我认识由来已久,其使用方法虽不十分复杂,但我却是经过了几个月的“不懂”时期,几年的“一知半解”时期才逐渐 ...

  8. C++_友元函数总结(转)

     原文地址:http://blog.csdn.net/insistgogo/article/details/6608672   1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 ...

  9. python2.7 调用 .net的webservice asmx

    首先安装pip install suds 或下载:https://pypi.org/project/suds-jurko/0.6/#files 这个是最新版本 由于不支持python3.6, 所以只能 ...

  10. impala-shell常用命令

    1.查看相关内网IP: cat /etc/hosts 2.进入impala: impala-shell; 3.显示数据库,数据表 show databases: show tables; 4.查看表结 ...