JSF学习之DataTable介绍

JSF学习之DataTable介绍

在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<%@ page contentType="text/html; charset=gb2312"%>
 2
 3<%@ taglib uri="/html" prefix="h"%>
 4<%@ taglib uri="/core" prefix="f"%>
 5<f:view>
 6<f:loadBundle basename="com.corejsf.messages" var="msgs" />
 7<link href="styles.css" rel="stylesheet" type="text/css"/>
 8<title><h:outputText value="#{msgs.windowTitle}" /></title>
 9
10<h:form>
11<h:dataTable value="#{tableData.names}" var="name">
12<h:column>
13<f:facet name="header">
14<h:outputText value="#{msgs.editColumn}" style="font-weight:bold"/>
15</f:facet>
16<h:selectBooleanCheckbox value="#{name.editable}" onclick="submit()"/>
17</h:column>
18<h:column>
19  <f:facet name="header">
20<h:outputText value="#{msgs.lastnameColumn}" style="font-weight:bold"/>
21  </f:facet>
22<h:inputText value="#{name.last}" rendered="#{name.editable}" size="10"/>
23<h:outputText value="#{name.last}" rendered="#{not name.editable}"/>
24</h:column>
25<h:column>
26  <f:facet name="header">
27<h:outputText value="#{msgs.firstnameColumn}" style="font-weight:bold"/>
28  </f:facet>
29  <h:inputText value="#{name.first}" rendered="#{name.editable}" size="10"/>
30  <h:outputText value="#{name.first}" rendered="#{not name.editable}"/>
31</h:column>
32</h:dataTable><p>
33<h:commandButton value="#{msgs.saveChangesButtonText}"/>
34</h:form>
35<h:messages/>
36
37</f:view>
38
  复选框的值与当前名称是否处于编辑状态相一致,如果处于编辑状态,则该复选框被选中,出现的是输入组件inputText,否则呈现的是输出组件outputText.
程序清单2 messages.properties
windowTitle = Editing Table Cells
lastnameColumn
= Last Name
firstnameColumn
= First Name
editColumn
= Edit
alphanumeric
= [alpha]
saveChangeButtonText
= Save Changes
程序清单3 Name.java

 1public class Name {
 2private String first;
 3private String last;
 4boolean editable=false;
 5public Name(String first,String last){
 6this.first=first;
 7this.last=last;
 8}

 9//相应的getter/setter方法
10}

11
程序清单4 TableData.java

 1public class TableData {
 2private static final Name[] names=new Name[]{
 3new Name("Willian","Dupont",
 4new Name("Anna","Keeney",
 5new Name("Maoko","Randor",
 6new Name("John","Wilson"
 7}
;
 8public  Name[] getNames() {
 9return names;
10}
}
程序清单5 faces-config.xml
faces-config.xml配置
 1<faces-config>
 2<application>
 3<locale-config><default-locale>en</default-locale></locale-config>
 4</application>
 5<managed-bean>
 6<managed-bean-name>tableData</managed-bean-name>
 7<managed-bean-class>com.corejsf.TableData</managed-bean-class>
 8<managed-bean-scope>session</managed-bean-scope>
 9</managed-bean>
10</faces-config>

程序清单6 web.xml
 
web.xml配置
1   <servlet>
2        <servlet-name>Faces Servlet</servlet-name>
3        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
4    </servlet>
5    <servlet-mapping>
6        <servlet-name>Faces Servlet</servlet-name>
7        <url-pattern>*.faces</url-pattern>
8    </servlet-mapping>

     还可以为指定相应行和列的样式,h:dataTable具有指定css类的一些属性,如styleClass(将表格作为一个整体)、headerClass和footerClass(列标题和脚注)、columnClasses和rowClasses(单独的行和列)。 其中rowClasses和columnClasses属性是互斥的,若二者皆指定则会使用columnClasses。
    其他应用:数据库表格、表格模型以及分类和筛选等。

你可能感兴趣的:(JSF学习之DataTable介绍)