All +
All -
sample
- 本章阅读说明
- 1,第一步、第二步的内容适合于那些没有读过该案例之前的章节读者,建议其他读者直接从第三步开始阅读
- 2,这里的读书记录,偏重于该案例在书中想要说明的知识点,而不是把前面章节没有涉及的内容都作为新知识点
- 3,建议阅读者,能够对照第四步中的内容,写出该案例的功能设计说明书
- 4,建议阅读者,能够对照第五步中的内容,写出该案例的功能实现方案
- 5,建议阅读者,能够动手在NetBeans 7.2(或其他IDE)中将该案例从头做一遍
- 6,本人在读书时,使用了思维导图(FreeMind)工具,如果有阅读者需要原型文档的,可qq联系:1028637037
- 7,该书是由美国 David Geary 和 Cay Horstmann 合著,由王超翻译,由《清华大学出版社》出版。如果您需要下载案例,可到出版社网址去。
- 第一步:创建案例
- 使用随书源码在NetBeans中创建项目
- + -第二步:运行案例
- + -一,在IDE中运行该案例
- *启动首页面index.xhtml
- + -一,在IDE中运行该案例
- 第三步:阅读案例结构
- web
- 1,页面文件
- index.xhtml
- 2,资源文件
- 无
- 3,WEB-INF
- 应用程序配置文件:web.xml
- CDI配置文件:beans.xml
- JSF配置文件:faces-config.xml
- 1,页面文件
- 源包src
- com.corejsf
- 类:TableData.java
- 类:Name.java
- 消息包:messages.properties
- com.corejsf
- 库
- JDK 1.7
- GlassFish Server 3.1.2
- web
- 第四步:阅读案例新功能
- 第一层面:视图
- 页面文件
- 首页:index.xhtml
- 1,从运行结果看
- *窗口标题显示内容:A Simple Table
- 一个简单的表
- *页面主体内容
- 1行文本:An array of names:
- 4行西方人的姓名
- 每行分为2列
- 每列之间由英文的逗号“,”隔开
- *窗口标题显示内容:A Simple Table
- 2,从页面文件看(新内容)
- *1个“数据表”组件
- 标签:h:dataTable
- 迭代的数据由特性value指定:value="#{tableData.names}"
- 迭代数据中的每个项由特性var指定:var="name"
- *2个数据表的“数据列”组件
- 作为数据表组件的子组件来使用
- 标签:h:column
- 用来显示数据表的一个列
- *1个“数据表”组件
- 1,从运行结果看
- 首页:index.xhtml
- 页面文件
- 第二层面:控制
- 页面控制器
- TableData
- *对应页面JSF HTML组件的属性
- 1,names:Name[]
- *对应页面JSF HTML组件的方法
- 1,对应于上述属性的读方法getNames():Name[]
- *对应页面JSF HTML组件的属性
- TableData
- 数据控制器
- TableData
- 页面控制器
- 第三层面:模型
- 对象模型
- Name
- *对象属性
- 1,first:String
- 2,last:String
- *对象行为
- 1,对应上述属性的读写方法
- *对象属性
- Name
- 对象模型
- 第四层面:配置
- 无新内容
- 新功能重点总结
- *在页面中显示一个数据表
- *该数据表主要显示一个数组中的所有项的内容
- *数组中每个项的内容是西方人的名称,即由两段组成的名称
- *每个人名由一行显示出来
- *每行分2列,分别显示名称中的前、后段内容
- *每个列之间用英文的逗号隔开
- 第一层面:视图
- 第五步:详解新技术(数据表)的应用
- 第一层面:视图
- 视图文件
- index.xhtml
-
*为了使用一个数据表,应用一个数据表标签h:dataTable迭代数据来创建HTML表格
*为了指定数据表中使用的数据,应用数据表标签的特性value的值来指定
- 例如:value="#{tableData.names}"
- 特性value的值可以是
- 一个Java对象
- 或一个数组
- 或java.util.List的实例
- 或java.sql.ResultSet的实例
- 或javax.servlet.jsp.jstl.sql.Result的实例
- 或javax.faces.model.DataModel的实例
*为了迭代数据表中使用数据的每一项,应用数据表标签的特性var的值来指定
- 例如:var="name"
*为了显示数据表中数据的每一项的各个列,应用数据表标签的子标签h:column
-
例如:
<h:column>
#{name.last},
</h:column>
<h:column>
#{name.first}
</h:column>
-
- index.xhtml
- 视图资源
- 无
- 视图文件
- 第二层面:控制
- 页面控制器
- TableData
- *在index.xhtml页面中使用
-
对象名称为:tableData
对象的方法getNames()返回值,作为“数据表”组件的特性value的值:
value="#{tableData.names}"
-
- *在index.xhtml页面中使用
- TableData
- 数据控制器
- TableData
-
通过方法getNames()操作(获取)对象模型Name的对象数组:
public Name[] getNames() {
return names;
}
-
- TableData
- 页面控制器
- 第三层面:模型
- 对象模型
- Name
- *属性
- first:String
- last:String
- *方法
-
属性对应的读写方法
构造方法,具有上述两个属性对应的参数:
public Name(String first, String last) {
this.first = first;
this.last = last;
}
-
- *属性
- Name
- 对象模型
- + -第四层面:配置
- 无新内容
- + -第五层面:国际化
- 英文消息文件
- com.corejsf.messages.properties
- 注意:这里不讨论太多国际化问题,它超出了该案例的主要问题
- 英文消息文件
- 第一层面:视图