Filter 如何使用延迟加载在primefaces数据表中实现全局过滤器?
在本教程之后,我有一个lazyDataModel的实现 我的代码与本教程略有不同,如下所示: 视图:Filter 如何使用延迟加载在primefaces数据表中实现全局过滤器?,filter,primefaces,lazy-loading,global,Filter,Primefaces,Lazy Loading,Global,在本教程之后,我有一个lazyDataModel的实现 我的代码与本教程略有不同,如下所示: 视图: 我的托管Bean: public LazyDataModel<Ciatt001> getAllClientes() { if (listaClientesLazy == null) { listaClientesLazy = new LazyClienteModel(ambiente.getCodCia(),ambiente.getCodAge());
我的托管Bean:
public LazyDataModel<Ciatt001> getAllClientes() {
if (listaClientesLazy == null) {
listaClientesLazy = new LazyClienteModel(ambiente.getCodCia(),ambiente.getCodAge());
//listaClientesLazy = new LazyClienteModelMBean();
}
return listaClientesLazy;
}
public LazyDataModel getAllClientes(){
if(listaClientesLazy==null){
listaClientesLazy=newlazyclientemodel(ambiente.getCodCia(),ambiente.getCodAge());
//listaClientesLazy=新的LazyClienteModelMBean();
}
返回listaClientesLazy;
}
我的懒惰模型
public List<Ciatt001> load(int startingAt, int maxPerPage, String sortField, SortOrder sortOrder, Map<String, String> filters) {
String a = "";
try {
listaClientes = new ArrayList<Ciatt001>();
a = String.valueOf(agendamientoSession.countClientes2(cia, age));
listaClientes = agendamientoSession.listaClientes2(cia, age, startingAt, maxPerPage);
} catch (Exception e) {
e.printStackTrace();
}
if (getRowCount() <= 0) {
setRowCount(Integer.parseInt(a));
}
setPageSize(maxPerPage);
return listaClientes;
}
@Override
public Object getRowKey(Ciatt001 ciatt001) {
return ciatt001.getClDocid();
}
@Override
public Ciatt001 getRowData(String docid) {
//Integer id = Integer.valueOf(idBandeja);
for (Ciatt001 ciatt001 : listaClientes) {
if (docid.equals(ciatt001.getClDocid())) {
return ciatt001;
}
}
return null;
}
公共列表加载(int startingAt、int maxPerPage、字符串sortField、SortOrder SortOrder、映射过滤器){
字符串a=“”;
试试{
listaClientes=newarraylist();
a=String.valueOf(agendamientoSession.countclients2(cia,age));
listaClientes=agendamientoSession.listaClientes2(cia、年龄、起始时间、最大每页);
}捕获(例外e){
e、 printStackTrace();
}
如果(getRowCount()On load functon),则获取筛选器值(检查是否不为null)
然后,如果不使用任何其他筛选器,请使用析取(或)进行查询:
如果您使用的是其他字段,则应执行以下操作:
//normal filters
filtersCondition = "(x = ? AND y = ?)" //replace ? for filters values
//global filters
globalFilterCondition = "(x = globalFilter OR y = globalFilter)" //replace ? for globalFilter value
//normal filters + global filter
query = "select * from table where " +filtersCondition+ " AND "+ globalFilterCondition
当然,这个查询只是一个示例,您应该构建一个很好的查询,并且参数化良好=)这就是我如何使用它的方法,分页和过滤:D
LazyDataModel现在看起来像这样:
在加载方法中:
Set set = filters.entrySet();
Iterator i = set.iterator();
if (i.hasNext()) {
Map.Entry me = (Map.Entry) i.next();
filterValue = (String) me.getValue();
}
a = String.valueOf(agendamientoSession.countClientes2(cia, age, filterValue));
listaClientes = agendamientoSession.listaClientes2(cia, age, startingAt, maxPerPage, filterValue);
setRowCount(Integer.parseInt(a));
ejb:
public List<Ciatt001> listaClientes2(String cia, String age ,int startingAt, int maxPerPage,String filtro) {
Query query = em.createNamedQuery("Ciatt001.listaClientesPorCiaPorAge2");
query.setParameter(1, cia);
query.setParameter(2, age);
query.setParameter(3,"%"+filtro+"%");
query.setParameter(4,"%"+filtro+"%");
query.setFirstResult(startingAt);
query.setMaxResults(maxPerPage);
}
仅此而已,
现在,我将寻找排序实现:D您好,谢谢您的回答,我使用的是最新版本3.3.1,是的,ciatt001实现了可序列化接口,是的,调试中,全局筛选器正在触发加载方法。我只需要一个关于如何使用此代码实现筛选器的线索,或者我需要以另一种方式编写它。谢谢:DThanks您的帮助!现在datatable工作得很好,起初我认为不使用where条件就可以完成,但如果没有lazyloading实现,则无法加载大的结果集。稍后我将分享完整的代码,再次感谢。Primefaces它有很好的文档记录,但没有(官方)关于lazy load+全局筛选器的参考。现在,有同样疑问的人可以在这里找到解决方案。我很乐意帮助=)
"select * from table where x = ? OR y = ?" //replace ? for globalFilter value
//normal filters
filtersCondition = "(x = ? AND y = ?)" //replace ? for filters values
//global filters
globalFilterCondition = "(x = globalFilter OR y = globalFilter)" //replace ? for globalFilter value
//normal filters + global filter
query = "select * from table where " +filtersCondition+ " AND "+ globalFilterCondition
Set set = filters.entrySet();
Iterator i = set.iterator();
if (i.hasNext()) {
Map.Entry me = (Map.Entry) i.next();
filterValue = (String) me.getValue();
}
a = String.valueOf(agendamientoSession.countClientes2(cia, age, filterValue));
listaClientes = agendamientoSession.listaClientes2(cia, age, startingAt, maxPerPage, filterValue);
setRowCount(Integer.parseInt(a));
public List<Ciatt001> listaClientes2(String cia, String age ,int startingAt, int maxPerPage,String filtro) {
Query query = em.createNamedQuery("Ciatt001.listaClientesPorCiaPorAge2");
query.setParameter(1, cia);
query.setParameter(2, age);
query.setParameter(3,"%"+filtro+"%");
query.setParameter(4,"%"+filtro+"%");
query.setFirstResult(startingAt);
query.setMaxResults(maxPerPage);
}
select * from ciatt001 c where c.cl_co_cia=? and c.cl_ag_agencia =?
and c.cl_estado='A' and (c.cl_docid like ? or c.cl_nombre1 like ? .. more filters if needed)