新的QFaces组件scroller, 这是一个翻页组件,直接绑定到dataTable中即可,使用非常简单,组件会包含在1.5中发布,最近会进行一些测试,组件的性能很好,比网上大部分人所用到的LocalDataModel方式要好,从性能上和易用性上。
从性能上,组件不会在生命周期中出现两次调用数据的多余操作,并且刷新之后仍可停留在原来所在的页面。
从易用性上,只要实现一个非常简单的方法绑定就可以,这已经近乎傻瓜式的了。
现在可以在这里看到一些效果,html,及java代码都有
http://huliqing-qfaces.appspot.com/qfaces-example/ui-scroller.faces?qRecordStart=90
预览一下用法吧,html代码
<h:form>
<q:scroller for="myDataTable"
bind="#{scrollerBean.loadData}"
displayCount="true"
displayJump="true"
displayPage="10">
<h:dataTable id="myDataTable" border="1"
binding="#{scrollerBean.myData}"
value="#{scrollerBean.people}" var="pl" width="500">
<h:column>
<h:outputText value="#{pl.name}" />
</h:column>
<h:column>
<h:outputText value="#{pl.age}" />
</h:column>
<h:column>
<h:outputText value="#{pl.birthday}" >
<f:convertDateTime pattern="yyyy-MM-dd"/>
</h:outputText>
</h:column>
<h:column>
<h:commandButton value="Test" actionListener="#{scrollerBean.testListener}" />
</h:column>
</h:dataTable>
</q:scroller>
</h:form>
看到组件所绑定的方法了吗:bind="#{scrollerBean.loadData}" ,后台代码只要实现一个这样的方法进行绑定就可以。
后台java代码
public PageModel loadData(long start) {
// 设置自己的pageSize
int pageSize = 10;
// 模拟,从DB中获取总记录数
long total = getTotalCount();
// 模拟从DB中获取一些数据,从start起pageSize条记录
ArrayList<Person> pageData = getFromDatabase(start, pageSize);
// 把这几个信息封装成PageModel返回,OK
PageModel pm = new PageModel();
pm.setPageData(pageData);
pm.setPageSize(pageSize);
pm.setTotal(total);
return pm;
}
你可能不明白start这个参数是怎么来的,这是scroller组件计算出来后给你的,当第一次加载页面时它会是0,它代表着现在需要从数据库中的第几条数据读取记录,你只要根据start,再配合你自己设置的pageSize从数据库获取一页数据返回给scroller组件就可以。返回类型是PageModel,这是QFaces组件包中的类。只是非常简单的要求三个数据而已,一个当前页的数据,一个总记录数,一个pageSize.组件根据这三个数据可计算,并且渲染一个scroller翻页导航。这还不是整个组件的完整面貌,它会变得更好的。
我很喜欢这个项目:)
最近又对QFaces作了大幅调整,调整了URL获取资源的方式,QFaces.js拆分成了两个文件QFaces-gen,QFaces-faces,命名空间也作了一些调整。
tree组件修正了一些bug,并提高了友好性。inputHelp修正了在谷歌浏览器下的错位问题,同时修正了上下左右键不能使用的问题。联动组件现在的工作方式仍然显得太积极,需要作一些调整。还有很多可以继续改进的。