《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驱动的批量插入操作性…

Java Duration类| isZero()方法与示例

持续时间类isZero()方法 (Duration Class isZero() method) isZero() method is available in java.time package. isZero()方法在java.time包中可用。 isZero() method is used to check whether this Duration object holds the value of length is 0 or not. isZero()方法用…

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

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

mysql语句数据库_数据库的Mysql语句

数据库的mysql语句: 1.连接数据库 mysql -u root -p2.显示数据库 show databases(db);3.选择数据库 use 数据库名;4.显示数据库中的表 show tables;基本数据操作:增删改查1.增 :insert into 表名(字段1,字段2…)values (值1,值2…);2.删 :delete from 表名 where 条件;3.改 :up…

java clock计时_Java Clock类| systemUTC()方法与示例

java clock计时Clock Class systemUTC()方法 (Clock Class systemUTC() method) systemUTC() method is available in java.time package. systemUTC()方法在java.time包中可用。 systemUTC() method is used to get a Clock that implements the suitable system clock in the…

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

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

操作系统系统调用_操作系统中的系统调用

操作系统系统调用系统调用简介 (Introduction to System calls) The interface between the operating system and the user program is defined by the set of extended instruction that the operating system provides. These extended instructions are known as system ca…

java分数表示_表示Java分数的最佳方法?

小编典典碰巧的是不久前我写了一个BigFraction类,用于解决Euler项目问题。它保留了BigInteger分子和分母,因此它将永远不会溢出。但是,对于许多你永远不会溢出的操作来说,这会有点慢。无论如何,请根据需要使用它。我一…

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

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

开源软件和自由软件_自由和开源软件的经济学

开源软件和自由软件零边际成本 (Zero Marginal Cost) At the core of the financial aspects of Free and Open Source is the zero negligible expense of merchandise in an environment that is digital. Right now, the rise of Free and Open Source speaks to an affirma…

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

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

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

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

多线程循环输出abcc++_C ++循环| 查找输出程序| 套装5

多线程循环输出abccProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;int main(){int num 15673;int R1 0, R2 0;do {R1 num % 10;R2 R2 * 10 R1;num num / 10;} while (num > 0);cout << R2 << " ";return 0;}Ou…

java oql_深入理解java虚拟机(八):java内存分析工具-MAT和OQL

以下内容翻译自MAT帮助文档。一、Class HistogramClass Histogram shows the classes found in the snapshot, the number of objects for each class, the heap memory consumption of these objects, and the minimum retained size of the objects二、Dominator treeDomina…

《Python数据分析与挖掘实战》一1.2 从餐饮服务到数据挖掘

本节书摘来自华章出版社《Python数据分析与挖掘实战》一书中的第1章&#xff0c;第1.2节&#xff0c;作者 张良均 王路 谭立云 苏剑林&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看 1.2 从餐饮服务到数据挖掘 企业经营最大的目的就是盈利&#xff0c;而餐…

obj[]与obj._Ruby中带有示例的Array.include?(obj)方法

obj[]与obj.Ruby Array.include&#xff1f;(obj)方法 (Ruby Array.include?(obj) Method) In the previous articles, we have seen how we can check whether two Array instances are identical or not with the help of <> operator, operator, and .eql? method?…

java javah_Java开发网 - 一个javah的问题

Posted by:jerry_xuPosted on:2006-03-13 15:39我在环境变量中已经设置了path为D:\Program Files\Java\jdk1.5.0_06&#xff0c;ClassPath设置为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;class的路径为&#xff1a;D:\JNItest\bin\jni\Hello.class &#xff0c;但是…

《Python面向对象编程指南》——2.7 __del__()方法

本节书摘来自异步社区《Python面向对象编程指南》一书中的第2章&#xff0c;第2.7节&#xff0c;作者&#xff3b;美&#xff3d;Steven F. Lott&#xff0c; 张心韬 兰亮 译&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.7 __del__()方法 __del__()方…

NullReferenceException C#中的异常

什么是NullReferenceException&#xff1f; (What is NullReferenceException?) NullReferenceException is an exception and it throws when the code is trying to access a reference that is not referencing to any object. If a reference variable/object is not refe…

java map key 大写转小写_Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?(转)...

Java 是区分大小写的&#xff0c;普通的Map例如HashMap如果其中的key"ABC" value"XXX"那么map.get("Abc") 或 map.get("abc")是获取不到值得。但Spring中产生了一个忽略大小写的map使我产生了好奇例如 jdbcTemplate.queryForList(sql)…