JSF中使用dataScroller和dataTable实现分页及其相关问题

在JSF中实现分页是很简单的,尤其是应用Tomahawk中的dataScroller组件。任何后台代码都不用写,只需配置一下就好。来看下面的例子:

<t:saveState value="#{roadForm.stationVec}"></t:saveState>
   <h:dataTable id="data"  value="#{roadForm.stationVec}   var="vec"  rows="10" >
    <h:column id="column1">
     <f:facet name="header">
      <h:outputText value="序号" styleClass="min"></h:outputText>
     </f:facet>
     <h:outputText value="#{vec.num}"></h:outputText>
    </h:column>
    <h:column id="column2">
     <f:facet name="header">
      <h:outputText value="站点名称" styleClass="min"></h:outputText>
     </f:facet>
     <h:outputText value="#{vec.stationName}"></h:outputText>
    </h:column>
    <f:facet name="footer">
     <t:dataScroller id="ds_sataion" for="data" fastStep="2"
           paginatorMaxPages="6" paginator="true" >
      
<f:facet name="first">
       <h:outputText value="首页   " />
      </f:facet>
      
<f:facet name="last">
       <h:outputText value="尾页   " />
      </f:facet>
    
  <f:facet name="previous">
       <h:outputText value="上一页   " />
      </f:facet>
      
<f:facet name="next">
       <h:outputText value="下一页   " />
      </f:facet>
     </t:dataScroller>
    </f:facet>
   </h:dataTable>

注意:

1.这里使用的分页组件是Tomahawk提供的<t:dataScroller >组件,而不是JSF的基本组件。若使用JSF提供的分页组件的话,还得在后台写关于分页的代码,比较麻烦。

2.使用<t:dataScroller >组件需要注意几点问题:

   a.在dataScroller中的facet的属性名称是固定的。必须保持一致。

   b.若dataScroller在dataTable的外面,dataScroller的for属性是必须写的,用于指定与哪一个dataTable相关联。在这里dataScroller放在了dataTable的里面,for属性可以省略。

   c.dataTable的rows属性必须要设置,否则组件无法分页。

   d.由于数据是一次性读取,所以在翻页时数据会丢失。要使用Tomahawk的<saveState>组件(或是将数据保存到session中),将状态保存下来。

   当然这种分页只是用于数据量较少的情况,如果数据量过大,那还是要在后台写分页类的。然后将其封装到DataModel中,前台页面的用法是一样的。不过,用了后台分页类进行分页,前台就无需再保存数据的状态了,把<saveState>组件去掉即可。

 JSF2.xdatatable分页控件与左侧菜单最简单应用   JSF2.x,功能强大,使用方便。全世界使用JSF的人越来越多。而且也有很多很好的控件给发出来了,如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能很强大,控件很多,但有一点不好就是不支持IE6,特别是下拉列表,p:dialog等,其它的分页p:datatable实际使用起来总有不如意的地方。richfaces还支持可视化开发,可惜就是控件开发进度相比其它的慢了很多。下面帖我的控件的使用方法:   下载地址:http://download.csdn.net/detail/ptianfeng/4802713 一、分页具体使用方法如下(不多说,直接给你些颜色看看): 1. xhtml文件:    <html xmlns:ems="http://www.ems.com.cn" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:dataTable id="tableId" value="#{userlogMBean.defaultDataModel}" var="var" rows="10"> <h:column> <f:facet name="header"> <h:outputText value="" /> </f:facet> <h:outputText value="#{var.sqlid}" /> </h:column> </h:dataTable> <ems:page id="pageId" for="tableId" maxPage="5" /> 2. 相应的Managedbean: [java] view plaincopy /** * EMS 11185 限时未达邮费奉还 * @author 螃蟹 */ @SuppressWarnings(value = "serial") @ManagedBean(name = "userlogMBean") @ViewScoped() public class UserlogMBean extends PageListBaseBean implements Serializable { public PagedListDataModel getDefaultDataModel() { if (defaultDataModel == null) { defaultDataModel = new PagedListDataModel(pageSize) { public DataPage fetchPage(int startRow, int pageSize) { ArrayList<UserlogVo> dataList = new ArrayList<UserlogVo>(); List<Userlog> list = dao.getObjectList(jpql, pageSize, startRow); if (list != null) { for (Userlog u : list) { UserlogVo vo = new UserlogVo(); vo.setSqlid(u.getSqlid()); vo.setCode(u.getCode()); vo.setDate(u.getDate()); vo.setStation(u.getStation()); vo.setUserid(u.getUserid()); vo.setText(u.getText()); dataList.add(vo); } } int size = dao.getCountOption(jpql); DataPage dataPage = new DataPage(size, startRow, dataList); return dataPage; } }; } return defaultDataModel; } } 提示:关于PageListBaseBean更多的信息,可以参阅我在百度的blog(百度改版后,让我很QF,所以转到CSDN来了): http://hi.baidu.com/kittopang/item/19af4e37c6ede2fae6bb7a11   至此,分页已经实现。下面是使用截图:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值