- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一个小项目,它由一个表组成,其中有 36000 条记录,我通过 DataTable Primefaces 向其显示。
首先,我遇到了分页速度问题,速度慢得令人抓狂。
我去了 Showcase Primefaces 并在 DataTable 中找到了 Lazy 的例子。
现在分页速度可以完美运行,但不能过滤记录。
我正在开发项目:网 bean 8.1 64 位JSF 2.2Primefaces 5.3 hibernate 4.3.xInformix 7.31 TD6
pojo如下:
package Pojos;
// Generated 18/09/2016 21:10:48 by Hibernate Tools 4.3.1
/**
* Asociados generated by hbm2java
*/
public class Asociados implements java.io.Serializable {
private Integer nroaccionista;
private Integer idcliente;
private String razonSocial;
private Short idlocalidad;
private Short zona;
private String calle;
private String puerta;
private String localidad;
private Short estado;
public Asociados() {
}
public Asociados(Integer nroaccionista) {
this.nroaccionista = nroaccionista;
}
public Asociados(Integer nroaccionista, Integer idcliente, String razonSocial, Short idlocalidad, Short zona, String calle, String puerta, String localidad, Short estado) {
this.nroaccionista = nroaccionista;
this.idcliente = idcliente;
this.razonSocial = razonSocial;
this.idlocalidad = idlocalidad;
this.zona = zona;
this.calle = calle;
this.puerta = puerta;
this.localidad = localidad;
this.estado = estado;
}
public Integer getNroaccionista() {
return this.nroaccionista;
}
public void setNroaccionista(Integer nroaccionista) {
this.nroaccionista = nroaccionista;
}
public Integer getIdcliente() {
return this.idcliente;
}
public void setIdcliente(Integer idcliente) {
this.idcliente = idcliente;
}
public String getRazonSocial() {
return this.razonSocial;
}
public void setRazonSocial(String razonSocial) {
this.razonSocial = razonSocial;
}
public Short getIdlocalidad() {
return this.idlocalidad;
}
public void setIdlocalidad(Short idlocalidad) {
this.idlocalidad = idlocalidad;
}
public Short getZona() {
return this.zona;
}
public void setZona(Short zona) {
this.zona = zona;
}
public String getCalle() {
return this.calle;
}
public void setCalle(String calle) {
this.calle = calle;
}
public String getPuerta() {
return this.puerta;
}
public void setPuerta(String puerta) {
this.puerta = puerta;
}
public String getLocalidad() {
return this.localidad;
}
public void setLocalidad(String localidad) {
this.localidad = localidad;
}
public Short getEstado() {
return this.estado;
}
public void setEstado(Short estado) {
this.estado = estado;
}
}
Pojo映射代码:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 18/09/2016 21:10:49 by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
<class name="Pojos.Asociados" table="asociados" optimistic-lock="version">
<id name="nroaccionista" type="java.lang.Integer">
<column name="nroaccionista" />
<generator class="assigned" />
</id>
<property name="idcliente" type="java.lang.Integer">
<column name="idcliente" />
</property>
<property name="razonSocial" type="string">
<column name="razon_social" length="30" />
</property>
<property name="idlocalidad" type="java.lang.Short">
<column name="idlocalidad" />
</property>
<property name="zona" type="java.lang.Short">
<column name="zona" />
</property>
<property name="calle" type="string">
<column name="calle" length="30" />
</property>
<property name="puerta" type="string">
<column name="puerta" length="10" />
</property>
<property name="localidad" type="string">
<column name="localidad" length="30" />
</property>
<property name="estado" type="java.lang.Short">
<column name="estado" />
</property>
</class>
</hibernate-mapping>
DAO:
package Daos;
import Interfaces.InterfazSocios;
import Pojos.Asociados;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
/**
*
* @author Gustavo
*/
public class DaoSocios implements InterfazSocios {
private List<Asociados> listaSocios;
private Integer cantidadAsociados;
@Override
public List<Asociados> verTodos(Session sesion) throws Exception {
String hql = "FROM Asociados ORDER BY NroAccionista";
Query query = sesion.createQuery(hql);
this.listaSocios = query.list();
return this.listaSocios;
}
public Integer totalDeAsociados(Session sesion) throws Exception {
String hql = "SELECT COUNT(nroaccionista) FROM Asociados";
//Query consulta = sesion.createQuery(hql).setCacheable(true);
this.cantidadAsociados = sesion.createQuery(hql).getMaxResults();
//this.listaSocios = consulta.list();
return this.cantidadAsociados;
}
}
托管 Bean:
package Beans;
import ApoyoBeans.LazyDataModelUsuarios;
import Daos.DaoSocios;
import HibernateUtil.HibernateUtil;
import Pojos.Asociados;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.LazyDataModel;
/**
*
* @author Gustavo
*/
@ManagedBean(name = "mBLazySocios")
@ViewScoped
public class MBLazySocios implements Serializable {
private LazyDataModel<Asociados> lazyModel;
private List<Asociados> listaAsociados;
private Asociados usuarioSeleccionado;
private Session sesion;
private Transaction transaccion;
public MBLazySocios(){
}
//@ManagedProperty("#{carService}")
//private CarService service;
@PostConstruct
public void init() {
try{
this.sesion = HibernateUtil.getSessionFactory().openSession();
this.transaccion = this.sesion.beginTransaction();
DaoSocios dao = new DaoSocios();
this.listaAsociados = dao.verTodos(this.sesion);
}catch(Exception e){
}
lazyModel = new LazyDataModelUsuarios(this.listaAsociados);
}
public LazyDataModel<Asociados> getLazyModel() {
return lazyModel;
}
public Asociados getUsuarioSeleccionado() {
return usuarioSeleccionado;
}
public void setUsuarioSeleccionado(Asociados usuarioSeleccionado) {
this.usuarioSeleccionado = usuarioSeleccionado;
}
//public void setService(CarService service) {
// this.service = service;
//}
public void onRowSelect(SelectEvent event) {
FacesMessage msg = new FacesMessage("Asociado Seleccionado", ((Asociados) event.getObject()).getNroaccionista().toString());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
最后,由 ManagedBean 调用的 LazyDataModel:
package ApoyoBeans;
import Pojos.Asociados;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
/**
*
* @author Gustavo
*/
public class LazyDataModelUsuarios extends LazyDataModel<Asociados> {
private final List<Asociados> datasource;
public LazyDataModelUsuarios(List<Asociados> datasource) {
this.datasource = datasource;
}
@Override
public Asociados getRowData(String rowKey) {
for(Asociados asoc : datasource) {
System.out.println(rowKey);
System.out.println(asoc.getNroaccionista().toString());
if(asoc.getNroaccionista().toString().equals(rowKey))
return asoc;
}
return null;
}
@Override
public Object getRowKey(Asociados aso) {
return aso.getNroaccionista().toString();
}
@Override
public List<Asociados> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) {
List<Asociados> data = new ArrayList<Asociados>();
//filter
for(Asociados asoc : this.datasource) {
boolean match = true;
if (filters != null) {
for (Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
try {
String filterProperty = it.next();
Object filterValue = filters.get(filterProperty);
String fieldValue = String.valueOf(asoc.getClass().getField(filterProperty).get(asoc));
System.out.println("Filtro: " + filterValue.toString());
System.out.println("Valor: " + fieldValue);
if(filterValue == null || fieldValue.startsWith(filterValue.toString())) {
match = true;
}
else {
match = false;
break;
}
} catch(Exception e) {
match = false;
}
}
}
if(match) {
data.add(asoc);
}
}
//sort
//if(sortField != null) {
// Collections.sort(data, new LazySorter(sortField, sortOrder));
//}
//rowCount
int dataSize = data.size();
this.setRowCount(dataSize);
//paginate
if(dataSize > pageSize) {
try {
return data.subList(first, first + pageSize);
}
catch(IndexOutOfBoundsException e) {
return data.subList(first, first + (dataSize % pageSize));
}
}
else {
return data;
}
}
}
啊,还有风景:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<body>
<ui:composition template="./plantilla/plantilla.xhtml">
<ui:define name="top">
top
</ui:define>
<ui:define name="content">
<h:form id="frmSocios">
<p:dataTable id="tablaSocios" var="soc" value="#{mBLazySocios.lazyModel}" paginator="true" selection="#{mBLazySocios.usuarioSeleccionado}" rows="25" lazy="true">
<p:column headerText="Número Socio" filterBy="#{soc.nroaccionista}" filterMatchMode="contains">
<p:outputLabel value="#{soc.nroaccionista}"/>
</p:column>
<p:column headerText="Número de Cliente">
<p:outputLabel value="#{soc.idcliente}"/>
</p:column>
<p:column headerText="Razón Social" >
<p:outputLabel value="#{soc.razonSocial}"/>
</p:column>
<p:column headerText="Calle">
<p:outputLabel value="#{soc.calle}"/>
</p:column>
<p:column headerText="Puerta">
<p:outputLabel value="#{soc.puerta}"/>
</p:column>
<p:column headerText="Distrito">
<p:outputLabel value="#{soc.zona}"/>
</p:column>
</p:dataTable>
</h:form>
</ui:define>
<ui:define name="bottom">
bottom
</ui:define>
</ui:composition>
</body>
展示 Primefaces 的示例 我在将列表作为数据源传递时避免了服务类。
我已经尽最大努力审查了代码,但在过滤时找不到错误。
如果您能给我任何帮助,我将不胜感激,感谢您的关注。
最佳答案
首先我要感谢那些关注我办公室的人,尤其是那些试图提供解决方案的人。
我希望通过我的解决方案,将我的问题提出为“一点点努力”,揭示并给予肯定的投票。
调试了几次代码后,我得出的结论是,在PrimeFaces的例子中,java反射管理很差。提出搜索的方式,程序抛出错误以访问 POJO 的私有(private)成员。
PrimeFaces 中建议的行(您可以在我的帖子的“LazyDataModelUsuarios”类中看到)如下所示:
String fieldValue = String.valueOf(asoc.getClass().getDeclaredField(filterProperty).get(asoc));
通过正确处理 java 反射,我的类如下:
LazyDataModelUsuarios.java:
package ApoyoBeans;
import Pojos.Asociados;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
/**
*
* @author Gustavo
*/
public class LazyDataModelUsuarios extends LazyDataModel<Asociados> {
private final List<Asociados> datasource;
public LazyDataModelUsuarios(List<Asociados> datasource) {
this.datasource = datasource;
}
@Override
public Asociados getRowData(String rowKey) {
for(Asociados asoc : datasource) {
if(asoc.getNroaccionista().toString().equals(rowKey)){
return asoc;
}
}
return null;
}
@Override
public Object getRowKey(Asociados aso) {
return aso.getNroaccionista().toString();
}
@Override
public List<Asociados> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) {
List<Asociados> data = new ArrayList<Asociados>();
//filter
System.out.println("Filtros:" + filters);
for(Asociados asoc : this.datasource) {
boolean match = true;
//System.out.println(filters);
if (filters != null) {
for (Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
try {
String filterProperty = it.next();
Object filterValue = filters.get(filterProperty);
//String fieldValue = asoc.getClass().getField(filterProperty).toString();
//String fieldValue = asoc.getRazonSocial();
//String fieldValue = (String) asoc.getClass().getDeclaredField(filterProperty).get(asoc);
//String fieldValue = String.valueOf(asoc.getClass().getDeclaredField(filterProperty).get(asoc));
Field miembroPrivado = asoc.getClass().getDeclaredField(filterProperty);
miembroPrivado.setAccessible(true);
String fieldValue = String.valueOf(miembroPrivado.get(asoc));
//System.out.println("Valor de fieldValue:" + fieldValue);
if(filterValue == null || fieldValue.startsWith(filterValue.toString().toUpperCase())) {
//System.out.println("Valor de filterValue.toString" + filterValue.toString());
//System.out.println("Valor de fieldValue" + fieldValue);
match = true;
}
else {
match = false;
break;
}
} catch(Exception e) {
e.printStackTrace();
match = false;
}
}
}
if(match) {
data.add(asoc);
}
}
//sort
//if(sortField != null) {
// Collections.sort(data, new LazySorter(sortField, sortOrder));
//}
//rowCount
int dataSize = data.size();
this.setRowCount(dataSize);
//paginate
if(dataSize > pageSize) {
try {
return data.subList(first, first + pageSize);
}
catch(IndexOutOfBoundsException e) {
return data.subList(first, first + (dataSize % pageSize));
}
}
else {
return data;
}
}
}
对于我为调试代码而添加的评论,我深表歉意,但现在功能齐全。
再次感谢。
关于java - 可以帮助我在 LazyDataModel 中进行过滤吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39628988/
我喜欢 smartcase,也喜欢 * 和 # 搜索命令。但我更希望 * 和 # 搜索命令区分大小写,而/和 ?搜索命令遵循 smartcase 启发式。 是否有隐藏在某个地方我还没有找到的设置?我宁
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
从以下网站,我找到了执行java AD身份验证的代码。 http://java2db.com/jndi-ldap-programming/solution-to-sslhandshakeexcepti
似乎 melt 会使用 id 列和堆叠的测量变量 reshape 您的数据框,然后通过转换让您执行聚合。 ddply,从 plyr 包看起来非常相似..你给它一个数据框,几个用于分组的列变量和一个聚合
我的问题是关于 memcached。 Facebook 使用 memcached 作为其结构化数据的缓存,以减少用户的延迟。他们在 Linux 上使用 UDP 优化了 memcached 的性能。 h
在 Camel route ,我正在使用 exec 组件通过 grep 进行 curl ,但使用 ${HOSTNAME} 的 grep 无法正常工作,下面是我的 Camel 路线。请在这方面寻求帮助。
我正在尝试执行相当复杂的查询,在其中我可以排除与特定条件集匹配的项目。这是一个 super 简化的模型来解释我的困境: class Thing(models.Model) user = mod
我正在尝试执行相当复杂的查询,我可以在其中排除符合特定条件集的项目。这里有一个 super 简化的模型来解释我的困境: class Thing(models.Model) user = mod
我发现了很多嵌入/内容项目的旧方法,并且我遵循了在这里找到的最新方法(我假设):https://blog.angular-university.io/angular-ng-content/ 我正在尝试
我正在寻找如何使用 fastify-nextjs 启动 fastify-cli 的建议 我曾尝试将代码简单地添加到建议的位置,但它不起作用。 'use strict' const path = req
我正在尝试将振幅 js 与 React 和 Gatsby 集成。做 gatsby developer 时一切看起来都不错,因为它发生在浏览器中,但是当我尝试 gatsby build 时,我收到以下错
我试图避免过度执行空值检查,但同时我想在需要使代码健壮的时候进行空值检查。但有时我觉得它开始变得如此防御,因为我没有实现 API。然后我避免了一些空检查,但是当我开始单元测试时,它开始总是等待运行时异
尝试进行包含一些 NOT 的 Kibana 搜索,但获得包含 NOT 的结果,因此猜测我的语法不正确: "chocolate" AND "milk" AND NOT "cow" AND NOT "tr
我正在使用开源代码共享包在 iOS 中进行 facebook 集成,但收到错误“FT_Load_Glyph failed: glyph 65535: error 6”。我在另一台 mac 机器上尝试了
我正在尝试估计一个标准的 tobit 模型,该模型被审查为零。 变量是 因变量 : 幸福 自变量 : 城市(芝加哥,纽约), 性别(男,女), 就业(0=失业,1=就业), 工作类型(失业,蓝色,白色
我有一个像这样的项目布局 样本/ 一种/ 源/ 主要的/ java / java 资源/ .jpg 乙/ 源/ 主要的/ java / B.java 资源/ B.jpg 构建.gradle 设置.gr
如何循环遍历数组中的多个属性以及如何使用map函数将数组中的多个属性显示到网页 import React, { Component } from 'react'; import './App.css'
我有一个 JavaScript 函数,它进行 AJAX 调用以返回一些数据,该调用是在选择列表更改事件上触发的。 我尝试了多种方法来在等待时显示加载程序,因为它当前暂停了选择列表,从客户的 Angul
可能以前问过,但找不到。 我正在用以下形式写很多语句: if (bar.getFoo() != null) { this.foo = bar.getFoo(); } 我想到了三元运算符,但我认
我有一个表单,在将其发送到 PHP 之前我正在执行一些验证 JavaScript,验证后的 JavaScript 函数会发布用户在 中输入的文本。页面底部的标签;然而,此消息显示短暂,然后消失...
我是一名优秀的程序员,十分优秀!