写点什么

JavaServer Faces 2.0 复合组件

  • 2008-11-08
  • 本文字数:1276 字

    阅读完需:约 4 分钟

自从 JavaServer Faces 于 2004 年首次发布后,JSF 2.0 就成为 Java EE 标准规范的首个主要更新。JSF 2.0 是 JSF 规范的一次重要革新,其目的在于解决开发者使用 Web 框架时所遇到的诸多问题。主要的变化包括:

  1. 使用基于 Facelets 的视图技术代替 JSP。
  2. 提供一种标准化的资源处理机制:很多组件都需要诸如 JavaScript 文件、图片或者是 CSS 元素等内容来正确地进行渲染。JSF 1.x 无法方便地处理这些内容,所以组件开发者不得不开发自己的处理机制。
  3. 可重新定位的资源:我们可以指定在哪里渲染资源,这个渲染位置可能与视图中的资源标签位置不同。这使得我们可以定制组件和 JSF 页面以在恰当的地方渲染引用的资源,这样即使组件被包含在 body 中,我们也可以在中引用 CSS 文件。
  4. 系统事件:发布 / 订阅的事件模型所支持的事件不再特定于一个具体的应用,而是起源于 JSF 应用执行过程中的特定时间点。UI 组件和应用对象(这是一个单例)都能收到系统事件。
  5. 增加的 scopes:增加了视图 scope 和组件 scope。对对话 scope 的支持预计会通过 Web Beans API 增加。
  6. “project stage”参数的标准化:Project stage 提供一种方式来影响 JSF 的行为,这以一组预先定义好的阶段枚举为基础,而这些阶段可以通过上下文参数或者 JNDI 进行设置。比如说,产品化开发和检查期间可以在浏览器中显示更多的调试信息。已定义的阶段有产品化、开发、单元测试、系统测试及产品化扩展阶段,并将产品化扩展作为默认值。你可以在运行时通过调用 Application.getProjectStage() 来查询应用对象以获得相应的值。
  7. 通过使用注解和默认值来减少 XML。
  8. 扩展 JSF 1.2 中引入的 AJAX 支持。

JSF 2.0 一下子提供这么多改进的目的在于解决开发者在使用 JSF 1.x 时遇到的一个主要问题——构建自定义组件的复杂性。使用 JSF 1.x 时,组件开发者要想开发出可以使用在标记页面上的自定义组件必须得遵循大量步骤。至少要实现 JSP 或 Facelets 的标记处理器,同时还要为该组件提供一个渲染器,这两项工作都需要在 faces-config.xml 文件中进行相应的配置。以 JSF 为中心的 Facelets 是 JSP 的一个替代方案,被 JSF 开发者广泛使用,它通过复合组件来支持模板,这在一定程度上改进了 JSF。这种方式需要创建一个包含模板标记和组件的 XHTML 页面,然后将这些页面作为组件在其它页面中使用。任何有效的 Facelet XHTML 页面都可以作为组件使用,与 JSF 1.x 中使用 Facelets 不同,JSF 2 中的复合组件都是真正的 UIComponents,这样它们就会支持验证器、转换器及监听器(可以监听行为和值的变化)。复合组件以资源的形式被处理, 因此它们可以使用新式的标准资源处理机制。例如,有一个名为 MenuPanel.html 的 Facelet 标记文件位于 ezcomp 资源库中,页面创建者就可以声明 xml 名称空间 xmlns:ez=http://java.sun.com/jsf/composite/ezcomp,并在页面中包含 & lt;ez:menuPanel /> 标记,以此来使用该组件。

JSF 2.0 专家组已经发布了 JSF 2.0 的第二个草案,该草案可从 JCP 站点上下载。该草案还有一个实现。规范的最终草案将会于今年年底出台。

查看英文原文: JavaServer Faces 2.0 Composite Components

2008-11-08 08:35957
用户头像

发布了 88 篇内容, 共 265.2 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

从头开始(概率)学HMM:精讲第五课-EM算法

herosunly

AI 引航计划 内容合集

【Flutter 专题】35 图解自定义 View 之 Canvas (三)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

disruptor在数据同步场景下的应用实战

编程 架构 面试 后端

第 12 章 -《Linux 一学就会》-重定向和文件的查找

学神来啦

云计算 Linux 运维 linux学习

TensorFlow by GoogleCNN识别猫和狗, 过拟合优化 易筋 ARTS 打卡 Week 70

John(易筋)

ARTS 打卡计划

定制个机器人帮你和Ta聊天

万俊峰Kevin

golang chatbot 聊天机器人 微信聊天

业界首个机密计算容器运行时—Inclavare Containers正式进入CNCF!

阿里巴巴云原生

阿里云 容器 云原生

mysql cpu占用超过100%

hasWhere

保姆级人工智能学习成长路径

herosunly

AI 引航计划 内容合集

netty系列之:使用netty搭建websocket客户端

程序那些事

Java Netty websocket 程序那些事

一文说清楚css3具有颠覆意义的2D转换效果

你好bk

CSS html css3 大前端 html/css

ERP对你有帮助吗?ERP是什么时候开始出现的?

低代码小观

管理 企业 企业管理 运营管理 企业管理系统

8. 这篇博客,把python从数值到模块、到字典、到元组,真python入门复习教程通览

梦想橡皮擦

10月月更

【LeetCode】重复的DNA序列Java题解

Albert

算法 LeetCode 10月月更

智慧火电扭转传统运作模式,3D可视化助力双碳政策疾行

一只数据鲸鱼

数据可视化 智慧能源 火力发电 智慧火电 火电厂

Form Schema 定义详解

全象云低代码

大前端 低代码平台 JSON Schema

VSCode设置Python的unittest测试

陈磊@Criss

OpenKruise 如何实现应用的可用性防护?

阿里巴巴云原生

阿里云 开源 云原生 OpenKruise

【布隆过滤】大数据+查重过滤+爬虫领域精选算法

cv君

AI 引航计划

源码 | 为金融场景而生的数据类型:Numeric

RadonDB

数据库 postgresql

🐬【MySQL技术专题】该换换你的数据库版本了,让我们一同迎接8.0的到来哦!(初探篇)

洛神灬殇

MySQL 运维 MySQL8.0 MySQL 数据库 10月月更

「IM开源推荐」前微信技术专家打造,golang实现,一键部署,客户端SDK全平台支持,轻松替代IM云服务

OpenIM

Interrupted Exception异常可能没你想的那么简单!

华为云开发者联盟

线程 JVM 高并发 并发 java

何时适合进行自动化测试?(上)

禅道项目管理

自动化测试

kubernetes pod访问不了外网但是宿主机可以

ilinux

从头开始(概率)学HMM:精讲第四课-预测问题(维特比算法)

herosunly

AI 引航计划 内容合集

架构实战营作业 -- 模块四

冬瓜茶

Vue进阶(幺贰柒):插槽详解

No Silver Bullet

Vue 插槽 10月月更

为了减少代码复杂度,我将if-else升级为面向状态编程

华为云开发者联盟

编程 复杂度 面向状态编程 if-else

010云原生之可观测架构模式

穿过生命散发芬芳

云原生 10月月更

ERP系统能帮你做些什么?ERP系统的部署类型哪个更适合你?

低代码小观

企业 企业管理 信息化管理 流程管理

JavaServer Faces 2.0复合组件_Java_Charles Humble_InfoQ精选文章