30.13. <w:dataView>

对于数据库中的数据,通常的展现方式是表格,然而,表格的缺点是有些古板,DataView提供了另外一种选择,它可以充分发挥你的想象力,允许你来指定数据展现的方式,原则上来说,它允许用任何你能想到的方式展现你的数据。

30.13.1. 构件信息

表 30.35. 构件信息

Component Typeorg.operamasks.faces.component.widget.UIDataView
Component Familyjavax.faces.Data
Component Classorg.operamasks.faces.component.widget.UIDataView
Tag Classorg.operamasks.faces.webapp.widget.UIDataViewTag
Renderer Typeorg.operamasks.faces.component.widget.UIDataView
Renderer Class(AJAX)org.operamasks.faces.render.widget.ajax.AjaxDataViewRenderer

继承体系

+java.lang.Object

++javax.faces.component.UIComponent

+++javax.faces.component.UIComponentBase

++++javax.faces.component.UIData

+++++org.operamasks.faces.component.widget.page.UIPagedData

++++++org.operamasks.faces.component.widget.base.UIDataViewBase

+++++++org.operamasks.faces.component.widget.UIDataView

30.13.2. 属性

表 30.36. 属性

async 定义类 org.operamasks.faces.component.widget.base.UIDataViewBase
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否异步加载数据
binding 定义类 javax.faces.component.UIComponentBase
类型 javax.el.ValueExpression(javax.faces.component.UIComponent)
是否必须 延时求值
一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。
container 定义类 org.operamasks.faces.component.widget.UIDataView
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
dataview外层div的id
first 定义类 org.operamasks.faces.component.widget.page.UIPagedData
类型 javax.el.ValueExpression(int)
是否必须 延时求值
指定显示的数据从哪一行开始
id 定义类 javax.faces.component.UIComponentBase
类型 java.lang.String
是否必须 延时求值
这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。
indexVar 定义类 org.operamasks.faces.component.widget.page.UIPagedData
类型 java.lang.String(java.lang.String)
是否必须 延时求值
标识服务器端的记录集的行号
jsvar 定义类 org.operamasks.faces.component.widget.UIDataView
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
客户端脚本使用的javascript变量名
rendered 定义类 javax.faces.component.UIComponentBase
类型 boolean(boolean)
是否必须 延时求值
一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。
rows 定义类 org.operamasks.faces.component.widget.page.UIPagedData
类型 javax.el.ValueExpression(int)
是否必须 延时求值
需要显示的行的数目
template 定义类 org.operamasks.faces.component.widget.UIDataView
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
定义简单模板
value 定义类 javax.faces.component.UIData
类型 java.lang.String
是否必须 延时求值
构件的当前值
var 定义类 javax.faces.component.UIData
类型 java.lang.String(java.lang.String)
是否必须 延时求值
代表每一行数据的变量

30.13.3. 构件API

30.13.3.1. UIDataView(dataView的构件类)

表 30.37. 常用方法

reload 方法签名 public void reload()
参数说明 没有参数
返回值 无返回值
方法描述 让dataView重新加载数据

30.13.4. 示例

以下的示例来自于 bpdemos,是一个商品价格查询的表格,这里定义了4列的信息,分别是"title"、 "listPrice"、 "yourPrice" 和"image",接着下面定义了模板,用{列的id}来绑定该列的信息,从而达到自定义的效果。

<w:page title="DataView">
    <w:pagingToolbar for="view-example" pageSize="3" />
    <w:form>
        <w:dataView id="view-example" jsvar="productView"
            value="#{datarepresent.dataViewBean.products}" var="p">
            <w:outputColumn id="title" value="#{p.title}" />
            <w:outputColumn id="listPrice" value="#{p.listPrice}" />
            <w:outputColumn id="yourPrice" value="#{p.yourPrice}" />
            <w:outputColumn id="image" value="#{p.image}" />
            <f:facet name="template">
                <h:panelGroup layout="block" styleClass="product">
                    <h:panelGrid columns="2">
                        <f:verbatim>
                            <img src="{image}" title="{title}" class="image" />
                        </f:verbatim>
                        <h:panelGrid columns="1">
                            <f:verbatim>
                                <span class="title">{title}</span>
                            </f:verbatim>
                            <f:verbatim>
                                <span>List Price: </span>
                                <span class="listPrice">{listPrice}</span>
                            </f:verbatim>
                            <f:verbatim>
                                <span>Your Price: </span>
                                <span class="yourPrice">{yourPrice}</span>
                            </f:verbatim>
                        </h:panelGrid>
                    </h:panelGrid>
                </h:panelGroup>
            </f:facet>
            <f:facet name="empty">
                <f:verbatim>No data to display.</f:verbatim>
            </f:facet>
        </w:dataView>
    </w:form>
</w:page>