日期:2014-05-16  浏览次数:20342 次

JSF DataModel数据模型类

JSF提供javax.faces.model包,数据模型DataModel类位于此包中。

DataModel实现了一个抽象任意数据绑定技术,可以被用来适应各种数据源使用JSF组件,为子组件提供Row操作功能(如UIData,表格、列表和树都是它的子类)。
例如,h:dataTable支持下面几种类型数据的存取
l????????? 数组
l????????? java.util.List
l????????? javax.servlet.jsp.jstl.sql.Result
l????????? java.sql.ResultSet
l????????? Object
分别对应以下几种DataModel:
l????????? ArrayDataModel
l????????? ListDataModel
l????????? ResultDataModel
l????????? ResultSetDataModel
l????????? ScalarDataModel
我们可以使用DataModel来设定dataTable的数据,通过调用DataModel的setWrappedObject()方法进行设定,调用getWrappedObject()则可以取回原始数据类型。
例如:

TableBean.java 
package onlyfun.caterpillar;

import java.util.*;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

public class TableBean {
    private DataModel model;

    private int rowIndex = -1;

    public DataModel getUsers() {
        if (model == null) {
            model = new ListDataModel();
            model.setWrappedData(getUserList());
        }
        return model;
    }

    private List getUserList() {
        List userList = new ArrayList();
        userList.add(new UserBean("caterpillar", "123456"));
        userList.add(new UserBean("momor", "654321"));
        userList.add(new UserBean("becky", "7890"));
        return userList;
    }

    public int getSelectedRowIndex() {
        return rowIndex;
    }

    public String select() {
        rowIndex = model.getRowIndex();
        return "success";
    }
}

?

?在这个Bean中,我们直接设定DataModel,将userList设定给它,如您所看到的,我们还可以取得DataModel的各个变量,在这个例子中,select()将作为点选表格之后的事件处理方法,我们可以借由DataModel的getRowIndex()来取得所点选的是哪一row的数据,例如:

index.jsp 


<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
<html> 
<link href="styles.css" rel="stylesheet" type="text/css"/> 
<body> 
<f:view> 
<h:form> 
<h:dataTable value="#{tableBean.users}" var="user" 
styleClass="orders" 
headerClass="ordersHeader" 
rowClasses="evenColumn,oddColumn"> 
<h:column> 
<f:facet name="header"> 
<h:outputText value="Name"/> 
</f:facet> 
<h:commandLink action="#{tableBean.select}"> 
<h:outputText value="#{user.name}"/> 
</h:commandLink> 
<f:facet name="footer"> 
<h:outputText value="****"/> 
</f:facet> 
</h:column> 
<h:column> 
<f:facet name="header"> 
<h:outputText value="Password"/> 
</f:facet> 
<h:outputText value="#{user.password}"/> 
<f:facet name="footer"> 
<h:outputText value="****"/> 
</f:facet> 
</h:column> 
</h:dataTable> 
</h:form> 
Selected Row: <h:outputText 
value="#{tableBean.selectedRowIndex}"/> 
</f:view> 
</body> 
</html> 

?

?

?? DataModel的rowIndex是从0开始计算,当处理ActionEvent时,JSF会逐次递增rowIndex的值,这让您可以得知目前正在处理的是哪一个row的数据.

?

?

?? JSF提供了一个模型包:javax.faces.model。数据模型DataModel类位于此包中。这个类的说明如下:数据模型(特指这个包中的DataModel类)是JSF数据绑定技术的一个抽象,而数据绑定技术能够被JSF组件用来和各种数据源进行适配,从而支持按照行

友情链接: 爱易网 云虚拟主机技术 云服务器技术 程序设计技术 开发网站 APP开发教程
Copyright © 2013-2024 爱易网页 当前在线:773人  网站在8时13分31秒内访问总人数:97419人 当前 30.88%  粤ICP备18100884号-2