Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 primefaces实时滚动与延迟加载兼容吗_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf 2 primefaces实时滚动与延迟加载兼容吗

Jsf 2 primefaces实时滚动与延迟加载兼容吗,jsf-2,primefaces,datatable,Jsf 2,Primefaces,Datatable,我有一个datatable,其中需要显示大量数据集。因此我决定使用primefaces实时滚动。我还了解到,要使用大量数据集提高datatable性能,我们需要实现延迟加载。参考primefaces showcase示例 ,我在声明中看到的 ,需要实现LazyDataModel,以便在分页、排序、筛选或实时滚动时查询数据源 提到了实时滚动,但我看不到处理滚动的代码。它只有处理排序、过滤、,行计数和分页。如果live scolling和lazy datamodel实现彼此兼容,或者我应该添加一些代

我有一个datatable,其中需要显示大量数据集。因此我决定使用primefaces实时滚动。我还了解到,要使用大量数据集提高datatable性能,我们需要实现延迟加载。参考primefaces showcase示例 ,我在声明中看到的

,需要实现LazyDataModel,以便在分页、排序、筛选或实时滚动时查询数据源


提到了实时滚动,但我看不到处理滚动的代码。它只有处理排序、过滤、,行计数和分页。如果live scolling和lazy datamodel实现彼此兼容,或者我应该添加一些代码来处理live scrolling,请有人澄清我的困惑。

它的工作原理与分页完全相同

下面是一个小例子:

xhtml


Bean

@ManagedBean
@视域
公共类Bean{
私人LazyDataModel LazyDataModel;
@EJB
用户EJB用户EJB;
@施工后
公共void init(){
lazyDataModel=新的LazyUserModel(userEJB);
}
公共LazyDataModel getLazyDataModel(){
返回懒散数据模型;
}
公共void setLazyDataModel(LazyDataModel LazyDataModel){
this.lazyDataModel=lazyDataModel;
}
//userEJB的setter和getter
}
LazyUserModel

公共类LazyUserModel扩展了LazyDataModel{
私有整数findAllCount;
@EJB
私有用户EJB用户EJB;
公共LazyUserModel(UserEJB UserEJB){
this.userEJB=userEJB;
}
@凌驾
公共列表加载(int first,int pageSize,String sortField,SortOrder SortOrder,
地图过滤器){
列表数据=新的ArrayList();
//pageSize是datatable中的scrollRows=“20”
data=userEJB.findAll(第一个,页面大小);
//findAll正在使用query.setFirstResult(first).setMaxResults(pageSize).getResultList()
//行数
if(findAllCount==null){
findAllCount=userEJB.findAllCount();
这个.setRowCount(findAllCount);
}
返回数据;
}
}

希望这能有所帮助。

6.1中似乎有一个新属性,liveScroll=“true”

谢谢Hatem澄清我的疑问:我发现你的解决方案有问题。我已经发布了这个问题。你能看一下吗?嘿,Hatim!你能解释一下为什么我们要设置行数以及目的是什么吗?tnx@anass这是记录的总数,这将有助于分页(页面导航器),在这种情况下,在liveScroll中,我不确定是否需要设置,但没有尝试消除调用。。尽管如此,保持事物的相似性是一种很好的做法,以防您返回分页
<p:dataTable var="user"
        value="#{bean.lazyDataModel}"
        scrollRows="20"
        liveScroll="true"
        scrollHeight="500"
        lazy="true"
        scrollable="true">

        <p:column headerText="name">
           <h:outputText value="#{user.name}" />
        </p:column>

</p:dataTable>
@ManagedBean
@ViewScoped
public class Bean {

    private LazyDataModel<User> lazyDataModel;

    @EJB
    UserEJB userEJB;

    @PostConstruct
    public void init() {
       lazyDataModel = new LazyUserModel(userEJB);
    }

    public LazyDataModel<User> getLazyDataModel() {
        return lazyDataModel;
    }

    public void setLazyDataModel(LazyDataModel<User> lazyDataModel) {
       this.lazyDataModel = lazyDataModel;
    }

   //setters and getters for userEJB
}
public class LazyUserModel extends LazyDataModel<User> {
   private Integer findAllCount;

   @EJB
   private UserEJB userEJB;

   public LazyUserModel(UserEJB userEJB) {
       this.userEJB = userEJB;
   }


   @Override
   public List<User> load(int first, int pageSize, String sortField, SortOrder sortOrder,
        Map<String, String> filters) {

       List<User> data = new ArrayList<User>();
       // pageSize is scrollRows="20" in the datatable
       data = userEJB.findAll(first, pageSize); 
       // findAll is using query.setFirstResult(first).setMaxResults(pageSize).getResultList()

      // rowCount
       if (findAllCount == null) {
           findAllCount = userEJB.findAllCount();
           this.setRowCount(findAllCount);
       }

       return data;
   }

}