我们都知道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国内镜像源配置方法

    Table of Contents 我们在国内从官网下载Eclipse以及插件非常慢,那么,有没有方法变快呢? 有,那就是使用国内的公开镜像源替换官方源. 1 下载Eclipse 首先,我们看一个链接 ...

  2. django数据模型中 null=True 和 blank=True 有什么区别?

    null 如果为 True , Django 在数据库中会将空值(empty)存储为 NULL .默认为 False . blank 设置字段是否可以为空,默认为False(不允许为空) 和null的 ...

  3. HDU1208:Pascal's Travels(DP)

    Problem Description An n x n game board is populated with integers, one nonnegative integer per squa ...

  4. 修改IP地址的PowerShell

    $wmi = Get-WmiObject win32_networkadapterconfiguration -filter "ipenabled = 'true'" $wmi.E ...

  5. 遮罩层中的相对定位与绝对定位(Ajax)

    前提:公司最近做的一个项目列表,然后点击项目,出现背景遮罩层,弹出的数据框需要异步加载数据数据,让这个数据框居中,搞了两天终于总算达到Boss满意的程度,做了半年C/S,反过来做B/S,顿时感到技术还 ...

  6. 添加 Github follow、star按钮到网页

    怎么把github的star/fork/watch三个按钮弄到自己网站上? 就是这个按钮如何弄到我的网站里面来,是否有API呢?mdo/github-buttons · GitHub这个超级方便已经添 ...

  7. Android -- DiskLruCache

    DiskLruCache 创建一个磁盘缓存对象: public static DiskLruCache open(File directory, int appVersion, int valueCo ...

  8. Android -- ViewPager切换动画,PageTransformer

    transformPage(View view, float position) view就是滑动中的那个view,position这里是float类型,是当前滑动状态的一个表示,比如当滑动到正全屏时 ...

  9. R 分组计算描述性统计量

    统计学区内各个小区的房价均值 数据格式 id|community_name|house_area|house_structure|house_total|house_avg|agency_name|h ...

  10. linux命令学习——cat

    1.前言 今天需要处理一个oui.txt文件,需要从中抽丝man和orginaziton信息,导出到另外一个文件中.可以cat和grep命令进行操作.之前对cat命令了解一下,知道cat可以查看文件内 ...