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";
    }
}

JSF提供了一个模型包:javax.faces.model。数据模型DataModel类位于此包中。这个类的说明如下:数据模型(特指这个包中的DataModel类)是JSF数据绑定技术的一个抽象,而数据绑定技术能够被JSF组件用来和各种数据源进行适配,从而支持按照行来处理他们的子组件(例如UIData)。DataModel实例中的数据集合(Data collection)是按照行对象(Row Objects)集合进行建模的,从而支持行指针(类似于数据库的游标,也是从0开始)。这个提供了通过当前行指针的位置来获得相对应的对象的一种机制。用户可以通过setWrappedData(Object obj)方法将业务对象附加到这个DataModel上,可以通过将null传递给这个方法来脱离。

UIComponent <-------> DataModel <--------> Business Model

注意:这里的UIComponent经常是UIData,我会在另外一个文章中介绍UIData.

ListDataModel, ArrayDataModel, ResultDataModel, ResultSetDataModel, ScalarDataModel

  1. ListDataModel可以方便的包装java.util.List对象。ListDataModel(java.util.List list)
  2. ArrayDataModel可以方便的包装Object[] 数组。ArrayDataModel(java.lang.Object[] array)
  3. ResultDataModel可以方便地包装JSTL的结果对象(JSTL Result Object),通常代表通过JSTL标签执行SQL语句产生的结果。ResultDataModel(javax.servlet.jsp.jstl.sql.Result result)
  4. ResultSetDataModel可以方便的包装Java对象的结果集(ResultSet of Java objects). ResultSetDataModel(java.sql.ResultSet resultSet)注意:这个结果集必须是可以滚动的(Scrollable),另外如果输入组件(可能更新模型值)通过使用值绑定来引用这个对象,这个结果集必须是可更新(Updatable)的
  5. ScalarDataModel可以方便的包装单个Java对象。ScalarDataModel(java.lang.Object scalar)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值