在Web应用中,html表格常用于放置内容。JSF允许使用h:dataTable标签来放置组件,其遍历数据来创建html表格。
1
<
h:dataTable
value
="#{item}"
var
="item"
>
2
<
h:column
><
h:outputText
value
="#{item.name}"
/>
h:column
>
3
<
h:column
><
h:outputText
value
="#{item.another}"
/>
h:column
>
4
h:dataTable
>
value属性表示所要遍历的数据,其可以是下列值之一:数组、List、java.sql.List实例、javax.servlet.jsp.jstl.Result实例、javax.faces.model.DataModel实例。在每次遍历之前,创建一个请求范围内的变量,并使用var属性来命名。当遍历时,它将数组、列表、结果集等中的每个项目都放到该标签的正文体中,使用var属性指定的名称来引用。
正如上例所显示的那样,h:dataTable标签的正文体只包含h:column标签,除了可
选的标题和脚注组件之外,每列都可以包含无数的组件。任何时候都可以在有自组
建的组件内部指定模板文件(即不是JSF标签的其他东西),但必须将这些模板文
本封装到f:verbatim标签的正文体内或者使用h:outputText来产生该模板文本。例如:
1
<
h:column
>
2
<
h:outputText
value
="#{item.name}"
/>
3
<
f:verbatim
>
,
f:verbatim
>
4
h:column
>
使用f:facet来为表格添加标题和脚注,如:
1
<
h:column
>
2
<
f:facet
name
="header"
><
h:outputText
value
="#{msgs.nameColumn}"
/>
f:facet
>
3
<
f:facet
name
="footer"
><
h:outputText
value
="#{msgs.footerColumn}"
/>
f:facet
>
4
h:column
>
要在表格的标题和脚注中添加多个组件,必须在h
anelGroup标签中将它们分成组,或者使用h
anelGrid或h:dataTable来将它们放到一个容器组件中。如果在一个facet中放置多个组件,只会显示第一个组件。
可以向表格中添加任何我们所需要的组件,并使用rendered属性来进行有条件的呈现、处理事件等。
使用dataTable实例: 编辑表格单元—只需提供所需要编辑的输入组件,单击复选框来编辑行,然后单击保存修改按钮来保存更改。
程序清单1 index.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35  
36  
37  
38  
 复选框的值与当前名称是否处于编辑状态相一致,如果处于编辑状态,则该复选框被选中,出现的是输入组件inputText,否则呈现的是输出组件outputText.  
程序清单2 messages.properties
windowTitle=Editing Table Cells
lastnameColumn=Last Name
firstnameColumn=First Name
editColumn=Edit
alphanumeric=[alpha]
saveChangeButtnotallow=Save Changes程序清单3 Name.java
1
publicclassName
{2
privateString first;3
privateString last;4
booleaneditable=false;5
publicName(String first,String last)
{6
this.first=first;7
this.last=last;8
}9
//相应的getter/setter方法10
}11
程序清单4 TableData.java
1
publicclassTableData
{2
privatestaticfinalName[] names=newName[]
{3
newName("Willian","Dupont",4
newName("Anna","Keeney",5
newName("Maoko","Randor",6
newName("John","Wilson"7
};8
publicName[] getNames()
{9
returnnames;10
}}程序清单5 faces-config.xml
faces-config.xml配置1
2
3
en4
5
6
tableData7
com.corejsf.TableData8
session9
10
程序清单6 web.xml
web.xml配置1
2
Faces Servlet3
javax.faces.webapp.FacesServlet4
5
6
Faces Servlet7
*.faces8
还可以为指定相应行和列的样式,h:dataTable具有指定css类的一些属性,如styleClass(将表格作为一个整体)、headerClass和footerClass(列标题和脚注)、columnClasses和rowClasses(单独的行和列)。 其中rowClasses和columnClasses属性是互斥的,若二者皆指定则会使用columnClasses。
其他应用:数据库表格、表格模型以及分类和筛选等。