《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets

本节书摘来异步社区《Java EE 7精粹》一书中的第2章,第2.1节,作者:【美】Arun Gupta,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第3章 JSF

JSF是基于Java的Web应用程序开发的服务器端用户界面(UI)框架。使用JSF可以实现:

  • 使用遵循模型-视图-控制器(MVC)设计模式的可重用的UI组件集合来创建网页。
  • 绑定组件到服务器端模型,允许UI与应用程序数据双向移动。
  • 处理UI事件响应和模型交互中的页面导航。
  • 管理跨服务器请求的UI组件状态。
  • 提供从客户端生成的事件到服务器端应用程序代码的简单模型。
  • 轻松地构建和重用自定义UI组件。

JSF应用程序包括:

  • 置于UI组件的布局中的一组网页。
  • 一组托管的Bean,包括绑定组件到服务器端模型的Bean(通常是CDI Bean)和作为控制器的Bean(通常是EJB或CDI Bean)。
  • 可选的部署描述符文件web.xml。
  • 可选的配置文件faces -config.xml。
  • 可选的一组自定义对象,包括应用程序开发人员创建的转换器和监听器。

3.1 Facelets

Facelets是JSF的视图声明语言(又名视图处理器)。他是JSP的替代者,JSP现在只保留了向后兼容性。在JSF2规范中引入的新功能,如复合组件和Ajax,只会暴露给Facelets的使用者。Facelets的主要优点包括一个功能强大的模板系统,可重用和易于开发,更好的错误报告(包括行号),以及对设计人员友好。

Facelets页面使用XHTML1.0和层叠样式表(CSS)来编写。XHTML1.0的文档是遵循XML1.0规则书写的HTML4文档。页面必须符合XHTML-1.0-Transitional DTD的要求。

使用XHTML定义的一个简单的Facelets页面如下:

0d2dcebfb3c625386abb18fe17755352d2fa58ce

在这段代码中,XML声明之后是文档类型定义(DTD)。页面的根元素是html,其中声明了命名空间http://www.w3.org/1999/xhtml。声明XML命名空间是为了在Web页面中使用标签库,Facelets的html标签(那些以h开头的标签)和普通的html标签用于添加组件。

表3-1给出了Facelets支持的标准标签库集合。

9b3a356d9009fc192f130cd95a0041a80653813a

按照惯例,使用XHTML创建的Web页面使用.xhtml作为扩展名。

Facelets提供表达式语言(EL)集成,这使得后台Bean可以和前台UI之间实现双向的数据绑定:

b15265968026250a2e2c2b05c4db5fa458c53525

在这段代码中,EL表达式#{name.value}代表请求作用域的CDI Bean的value字段的值:

5709f75a18f4e92d84ea377c8fbf09294a98b171

重要的是要为这个CDI Bean添加@Named注解,以使其可以依赖注入到EL表达式中。

在JSF2.2中,@javax.faces.bean.ManagedBean注解是未来的版本中不建议使用的,所以强烈建议使用@Named来代替。

JSF2.2还引入了新的CDI作用域:javax.faces.view.ViewScoped。在一个Bean上指定该注解,可以将这个Bean与当前视图绑定。javax.faces.bean.ViewScoped注解是未来的版本中不建议使用的,所以强烈建议使用新引入的作用域。

同样地,一个EJB可以在EL表达式注入:

53b78870426421b390435cdbbf0e867f557a1404

这是一个无状态的会话Bean,包含一个返回客户名称列表的业务方法。@Named标记它可以依赖注入到EL表达式中,可以在Facelets的EL表达式中使用:

0ccb4d2cecd75eb6d89365f52373cec4a14e532f

在这段代码中,客户名称列表的返回值显示在一个表格组件当中。请注意getCustomerNames方法是如何作为一个属性用在EL表达式中的。

Facelets还提供了编译期EL表达式验证。

此外,Facelets提供了一个功能强大的模板系统,使我们可以在一个Web应用程序的多个页面之间提供一致的界面外观。基础页面称为模板,是通过Facelets的模板标签创建的。这个页面为Web页面定义了一个缺省页面骨架,包括内容占位符,会在将来的页面中使用模板来添肉。模板客户端页面使用这个模板,为模板骨架中定义的占位符提供具体的肉(实际的内容)。

表3-2列出了一些在模板和模板客户端页面中使用的通用标签。

3e260b686c05e9ea9dfb3a2e3e63625b657b5a9e

模板页面的外观示例如下:

7eb69a88376ab50a7fc3e97f440ab6da5d197a8d

在这段代码中,在页面中使用

和CSS(在这里没有显示)定义结构。ui:insert定义了被模板客户端页面替换的内容。

模板客户端页面示例如下:

63515cdbc167fbb5dddb558fbe8e49064e60bb3e

在这段代码中,名为top和bottom的ui:insert没有定义,那么这些部分使用模板页面的ui:define元素的名称匹配模板中的ui:insert元素,因此模板的这部分内容被替换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql5批处理_转关于mysql5.5 的批处理讨论(转载)

MySql的JDBC驱动不支持批量操作(已结)MySql连接的url中要加rewriteBatchedStatements参数,例如String connectionUrl"jdbc:mysql://192.168.1.100:3306/test?rewriteBatchedStatementstrue";还要保证mysql JDBC驱的版本。MySql的JDBC驱动的批量插入操作性…

《C#多线程编程实战(原书第2版)》——3.2 在线程池中调用委托

本节书摘来自华章出版社《C#多线程编程实战(原书第2版)》一书中的第3章,第3.2节,作者(美)易格恩阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可…

《Android 应用测试指南》——第2章,第2.4节包浏览器

本节书摘来自异步社区《Android 应用测试指南》一书中的第2章,第2.4节包浏览器,作者 【阿根廷】Diego Torres Milano(迭戈 D.),更多章节内容可以访问云栖社区“异步社区”公众号查看 2.4 包浏览器创建完前面提到的两个…

《OpenStack云计算实战手册(第2版)》——1.7 添加用户

本节书摘来自异步社区《OpenStack云计算实战手册(第2版)》一书中的第1章,第1.7节,作者: 【英】Kevin Jackson , 【美】Cody Bunch 更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.7 添加用户 在OpenStack身份认证服务中…

java外部类_Java里什么叫内部类什么叫外部类

展开全部对普通类(没有内部类的类)来说,62616964757a686964616fe78988e69d8331333337396234内部类和外部类都与他无关;对有内部类的类来说,它们就是其内部类的外部类,外部类是个相对的说法,其实就是有内部类的类。所以…

《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识

本节书摘来自异步社区《精通Matlab数字图像处理与识别》一书中的第6章,第6.2节,作者 张铮 , 倪红霞 , 苑春苗 , 杨立红,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.2 傅立叶变换基础知识 精通Matlab数字图像处理与识别要理解傅立…

《iOS 6核心开发手册(第4版)》——2.11节秘诀:构建星星滑块

本节书摘来自异步社区《iOS 6核心开发手册(第4版)》一书中的第2章,第2.11节秘诀:构建星星滑块,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.11 秘诀:构建星星…

软考下午题具体解释---数据流图设计

在历年的软考下午题其中,有五道大题。各自是数据流图的设计,数据库设计,uml图,算法和设计模式,从今天这篇博文開始,小编就跟大家来一起学习软考下午题的相关内容。包含理论上的知识以及典型例题的解说&…

mysql属于数据库三级模式_数据库系统的三级模式指的是什么

数据库系统的三级模式指的是什么发布时间:2020-10-26 10:11:21来源:亿速云阅读:52作者:小新小编给大家分享一下数据库系统的三级模式指的是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧&…

《自顶向下网络设计(第3版)》——导读

目录 第1部分 辨明客户的需求和目标 第1章 分析商业目标和制约 1.1 采用自顶向下的网络设计方法 1.2 分析商业目标 1.3 分析商业制约 1.4 商业目标检查表 1.5 小结 1.6 复习题 1.7 设计环境 第2章 分析技术目标与折衷措施 2.1 可扩展性 2.2 可用性 2.3 网络性能 2.4 安全性 2…

最小硬币问题_进行更改的最小硬币数量

最小硬币问题Description: 描述: This is classic dynamic programming problem to find minimum number of coins to make a change. This problem has been featured in interview rounds of Amazon, Morgan Stanley, Paytm, Samsung etc. 这是经典的动态编程问题…

补丁(patch)的制作与应用

为什么80%的码农都做不了架构师?>>> 转自http://linux-wiki.cn/wiki/zh-hans/%E8%A1%A5%E4%B8%81(patch)%E7%9A%84%E5%88%B6%E4%BD%9C%E4%B8%8E%E5%BA%94%E7%94%A8 如果hack了开源代码,为了方便分享(如提交Bug)或自己…

hbase 伪分布安装 java_HBase基础和伪分布式安装配置

一、HBase(NoSQL)的数据模型1.1 表(table),是存储管理数据的。1.2 行键(row key),类似于MySQL中的主键,行键是HBase表天然自带的,创建表时不需要指定1.3 列族(column family),列的集合。一张表中有多个行健&#xff0c…

java script创建对象_JavaScript七种非常经典的创建对象方式

JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产。接下来介绍七种非常经典的创建对象的方式,他们也各有优缺点。一、工厂模式可以无数…

axis2开发webservice之编写Axis2模块(Module)

axis2中的模块化开发。能够让开发者自由的加入自己所需的模块。提高开发效率,减少开发的难度。 Axis2能够通过模块(Module)进行扩展。Axis2模块至少须要有两个类,这两个类分别实现了Module和Handler接口。开发和使用一个Axis2模块…

java 看书浏览器官_JAVA读取文件流,设置浏览器下载或直接预览操作

最近项目需要在浏览器中通过url预览图片。但发现浏览器始终默认下载,而不是预览。研究了一下,发现了问题:// 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注释掉&…

scrapy抓取淘宝女郎

scrapy抓取淘宝女郎 准备工作 首先在淘宝女郎的首页这里查看,当然想要爬取更多的话,当然这里要查看翻页的url,不过这操蛋的地方就是这里的翻页是使用javascript加载的,这个就有点尴尬了,找了好久没有找到,这里如果有朋…

win10 iot core java_Windows 10 IoT Core 正式版初体验

今天收到Windows 10 IoT Core Team邮件,Windows 10 IoT Core正式发布。以下记录了今天在Raspberry Pi 2上的体验过程:准备工作一台运行着正版Windows 10且版本不小于10240的个人PCVisual Studio 2015 版本不小于14.0.23107.0 D14Rel Install Visual Stud…

VUE2 第五天学习--过渡效果

阅读目录 1.理解VUE---过渡效果回到顶部1.理解VUE---过渡效果 1. 过渡的-css-类名会有4个(css) 类名在 enter/leave 在过渡中切换。1. v-enter: 进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。2. v-enter-active: 进入过渡的结束状态。在元素被插入时生效…

国家可持续发展议程创新示范区创建工作推进会在北京召开

2019独角兽企业重金招聘Python工程师标准>>> 为推进地方申报国家可持续发展议程创新示范区相关工作,根据国家可持续发展议程创新示范区创建工作的进展及需求,2017年4月23日—25日,科技部社会发展科技司、中国21世纪议程管理中心在…