Java Wicket:Dataview与PagingNavigator
我不知道为什么,但在我将添加到之后,页面第一次加载时慢了5秒 我的数据提供程序正在从数据库加载数据。但是,使用相同的数据提供程序,只需删除,页面加载速度将加快约5秒 代码如下:Java Wicket:Dataview与PagingNavigator,java,wicket,dataview,Java,Wicket,Dataview,我不知道为什么,但在我将添加到之后,页面第一次加载时慢了5秒 我的数据提供程序正在从数据库加载数据。但是,使用相同的数据提供程序,只需删除,页面加载速度将加快约5秒 代码如下: private void initScreen() { feedbackPanel = new FeedbackPanel(Constants.FEEDBACK_CONST); add(feedbackPanel.setOutputMarkupId(true)); form = new Form
private void initScreen() {
feedbackPanel = new FeedbackPanel(Constants.FEEDBACK_CONST);
add(feedbackPanel.setOutputMarkupId(true));
form = new Form<Void>(FORM_CONST);
prepareDataView();
form.add(estabelecimentoDataView);
form.add(new PagingNavigator(NAVIGATOR_CONST, estabelecimentoDataView));
add(form);
}
private void prepareDataView() {
dataProvider = new EstabelecimentosProvider();
/** dataview que lista as agencias */
estabelecimentoDataView = new DataView<Estabelecimento>(ROWS_CONST, dataProvider) {
/**
* Serial id
*/
private static final long serialVersionUID = -3327582763351095154L;
@Override
protected void populateItem(Item<Estabelecimento> item) {
final Estabelecimento estab = item.getModelObject();
AjaxLink<Void> link = new AjaxLink<Void>(LINK_CONST) {
/**
* Serial id
* , tipoEmpresa.getDescricao()
*/
private static final long serialVersionUID = -1668530681964357458L;
@Override
public void onClick(AjaxRequestTarget target) {
selectedEstabelecimento = estab;
ParamsWrapper params = new ParamsWrapper();
params.put(Constants.KEY_CONST, estab.getId());
PageManager.changePage(this, PageManager.ESTABELECIMENTOS_ALTERAR_PAGE, params);
}
};
link.add(new Label(NOME_CONST, new PropertyModel<String>(estab, "nome")));
item.add(link);
item.add(new Label(ENDERECO_CONST, new PropertyModel<String>(estab, "endereco")));
item.add(new Label(BAIRRO_CONST, new PropertyModel<String>(estab, "bairro")));
item.add(new Label(CIDADE_CONST, new PropertyModel<String>(estab, "cidade")));
item.add(new Label(UF_CONST, new PropertyModel<String>(estab, "uf")));
item.add(new AjaxButton(DELETE_CONST) {
/**
* Serial id
*/
private static final long serialVersionUID = 1762220739285945720L;
@Override
protected void onSubmit(AjaxRequestTarget target) {
// TODO Auto-generated method stub
super.onSubmit(target);
selectedEstabelecimento = estab;
//removeConfirmationMessage(Constants.REMOVER_AGENCIA_CONST + selectedAgencia.getRazaoSocial() + "?", target);
}
});
}
};
estabelecimentoDataView.setOutputMarkupId(true);
estabelecimentoDataView.setItemsPerPage(Constants.ITEMS_PER_PAGE);
estabelecimentoDataView.setItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance());
}
private void initScreen(){
反馈面板=新的反馈面板(常数反馈常数);
添加(feedbackPanel.setOutputMarkupId(true));
表格=新表格(表格常数);
prepareDataView();
添加表格(EstablecimentOdatView);
添加(新的PagingNavigator(NAVIGATOR_CONST,EstableciementODataView));
添加(表格);
}
私有void prepareDataView(){
dataProvider=新的EstabelecimentosProvider();
/**作为代理的数据视图*/
estabelecimentoDataView=新数据视图(行常量,数据提供程序){
/**
*序列号
*/
私有静态最终长serialVersionUID=-3327582763351095154L;
@凌驾
受保护的无效填充项(项){
final Establecimento estab=item.getModelObject();
AjaxLink链路=新的AjaxLink(链路常数){
/**
*序列号
*,tipoEmpresa.getdescripcao()
*/
私有静态最终长serialVersionUID=-1668530681964357458L;
@凌驾
公共void onClick(AjaxRequestTarget目标){
选择了稳定的Elecimento=estab;
ParamsWrapper params=新的ParamsWrapper();
参数put(Constants.KEY_CONST,estab.getId());
PageManager.changePage(此,PageManager.ESTABELECIMENTOS_ALTERAR_页面,参数);
}
};
添加(新标签(NOME_CONST,新属性模型(estab,NOME));
添加(链接);
添加项目(新标签(ENDERECO_CONST,新属性模型(estab,ENDERECO));
添加项目(新标签(BAIRRO_CONST,新属性模型(estab,“BAIRRO”));
添加(新标签(CIDADE_CONST,新属性模型(estab,CIDADE));
添加(新标签(UF_CONST,新属性模型(estab,UF));
添加(新的AjaxButton(删除常量){
/**
*序列号
*/
专用静态最终长serialVersionUID=1762220739285945945720L;
@凌驾
提交时受保护的void(AjaxRequestTarget目标){
//TODO自动生成的方法存根
super.onSubmit(target);
选择了稳定的Elecimento=estab;
//RemoveConfigurationMessage(Constants.REMOVER_AGENCIA_CONST+selectedAgencia.getRazaoSocial()+“?”,目标);
}
});
}
};
setOutputMarkupId(true);
EstablecimentOdatView.setItemsPerPage(每页常量.ITEMS);
setItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance());
}
更新(EstabelecimentosProvider实施):
public类establecimentosProvider实现IDataProvider{
/**
*序列号
*/
私有静态最终长serialVersionUID=1L;
@凌驾
公共迭代器让我们看看EstabelecimentosProvider
的代码
我想原因是您没有缓存结果。分页导航器需要知道数据的大小,我想这在您的实现中很昂贵。在正常情况下,表和带导航的表之间的唯一区别是表大小方法调用
InstaPontoWebController.get().buscarEstabelecimentosTotal()
这个方法能工作多久?dataprovider与分页概念兼容吗?我想是的,它是兼容的。也许吧。我已经把EstableCimentOProvider代码,还有EstableCimentOdao代码,它在数据库中执行查询。对吗?调试代码时,我注意到代价高昂的方法是“onRender”pagingNavigator的。它的具体价格是多少?我不清楚,但在呈现pagingNavigator的“第一个”链接时,它在renderNext()方法中。
public class EstabelecimentoDao {
/***
* Usado para registrar todas chamadas da classe.
*/
Logger log = LogManager.getLogger(EstabelecimentoDao.class);
/**
* Pesquisa por todas os estabelecimentos do sistema.
* @return uma lista de estabelecimentos.
*/
public final List<Estabelecimento> buscarEstabelecimentos() {
return EntityManagerHelper.getEntityManager().createQuery("FROM Estabelecimento",
Estabelecimento.class).getResultList();
}
/**
* Retorna o status que representa sem uso no sistema.
* @param empresa a empresa em uso.
* @return os estabelecimentos sem uso para a empresa passada.
*/
public List<Estabelecimento> buscarEstabelecimentosSemUso(Empresa empresa) {
TypedQuery<Estabelecimento> query = null;
List<Integer> estabelecimentos = prepareList(empresa.getPontos());
List<Integer> ramosAtividade = prepareList(empresa.getRamosAtividade());
if (estabelecimentos.size() > 0 && ramosAtividade.size() > 0) {
query = EntityManagerHelper.getEntityManager().createQuery(
"From Estabelecimento e where e.id not IN :filter and e.ramoAtividade.id IN :ids and e.ativo = :key Order by e.nome ASC",
Estabelecimento.class);
query.setParameter(Constants.FILTER_CONST, estabelecimentos);
query.setParameter(Constants.IDS_CONST, ramosAtividade);
} else if (ramosAtividade.size() > 0) {
query = EntityManagerHelper.getEntityManager().createQuery(
"From Estabelecimento e where e.ramoAtividade.id IN :ids and e.ativo = :key Order by e.nome ASC",
Estabelecimento.class);
query.setParameter(Constants.IDS_CONST, ramosAtividade);
} else {
query = EntityManagerHelper.getEntityManager().createQuery(
"From Estabelecimento e where e.ativo = :key Order by e.nome ASC", Estabelecimento.class);
}
query.setParameter(Constants.KEY_CONST, true);
return query.getResultList();
}
/**
* Prepara lista de ids dos ramos de atividades.
* @param ramosAtividade os ramos de atividades.
* @return a lista.
*/
private List<Integer> prepareList(Set<RamoAtividade> ramosAtividade) {
List<Integer> list = new ArrayList<Integer>();
for (RamoAtividade ramoAtividade : ramosAtividade) {
list.add(ramoAtividade.getId());
}
return list;
}
/**
* Prepara a lista de ids de pontos.
* @param pontos a lista de pontos.
* @return a lista de id de pontos.
*/
private List<Integer> prepareList(List<Ponto> pontos) {
List<Integer> list = new ArrayList<Integer>();
for (Ponto ponto : pontos) {
list.add(ponto.getEstabelecimento().getId());
}
return list;
}
/**
* Retorna os estabelecimentos sem uso no sistema.
* @return os estabelecimentos sem uso.
*/
public List<Estabelecimento> buscarEstabelecimentosSemUso(List<Ponto> pontos) {
TypedQuery<Estabelecimento> query = null;
if (pontos.size() > 0) {
query = EntityManagerHelper.getEntityManager().createQuery("From Estabelecimento e where e.id not IN :filter and e.ativo = :key Order by e.nome ASC",
Estabelecimento.class);
List<Integer> estabelecimentos = prepareList(pontos);
query.setParameter(Constants.FILTER_CONST, estabelecimentos);
} else {
query = EntityManagerHelper.getEntityManager().createQuery("From Estabelecimento e where e.ativo = :key Order by e.nome ASC",
Estabelecimento.class);
}
query.setParameter(Constants.KEY_CONST, true);
return query.getResultList();
}
/**
* Retorna os estabelecimentos em uso no sistema.
* @return os estabelecimentos em uso.
*/
public List<Estabelecimento> buscarEstabelecimentosEmUso(List<Ponto> pontos) {
TypedQuery<Estabelecimento> query = null;
List<Estabelecimento> result = null;
if (pontos.size() > 0) {
query = EntityManagerHelper.getEntityManager().createQuery(
"From Estabelecimento e where e.id IN :filter and e.ativo = :key Order by e.nome ASC",
Estabelecimento.class);
List<Integer> estabelecimentos = prepareList(pontos);
query.setParameter(Constants.FILTER_CONST, estabelecimentos);
query.setParameter(Constants.KEY_CONST, true);
result = query.getResultList();
} else {
result = new ArrayList<Estabelecimento>();
}
return result;
}
/**
* Retorna os estabelecimentos inativos no sistema.
* @return os estabelecimentos inativos.
*/
public List<Estabelecimento> buscarEsetabelecimentosInativos() {
TypedQuery<Estabelecimento> query = EntityManagerHelper.getEntityManager().createQuery("From Estabelecimento e where e.ativo = :key Order by e.nome ASC",
Estabelecimento.class);
query.setParameter(Constants.KEY_CONST, false);
return query.getResultList();
}
/**
* Procura um estabelecimento pelo identificador.
* @param id o identificador do estabelecimento.
* @return o estabelecimento ou null se nao for encontrado.
*/
public Estabelecimento buscar(Integer id) {
return EntityManagerHelper.getEntityManager().find(Estabelecimento.class, id);
}
/**
* Retorna lista de estabelecimentos com nome parecido com o texto.
* @param texto o filtro a ser usado no nome.
* @return a lista de estabelecimentos encontrados
*/
public List<Estabelecimento> buscarEstabelecimentos(String texto) {
TypedQuery<Estabelecimento> query = EntityManagerHelper.getEntityManager().createQuery(
"From Estabelecimento e where UPPER(e.nome) LIKE UPPER(:filter) and e.ativo = true Order by e.nome ASC",
Estabelecimento.class);
query.setParameter(Constants.FILTER_CONST, "%" + texto + "%");
return query.getResultList();
}
/**
* Retorna o total de estabelecimentos.
* @return total de estabelecimentos.
*/
public long buscarTotal() {
TypedQuery<Long> query = EntityManagerHelper.getEntityManager().createQuery(
"SELECT count(e) FROM Estabelecimento e",
Long.class);
return query.getSingleResult();
}
/**
* Faz a paginacao nos estabelecimentos cadastrados.
* @param first o offset inicial
* @param count a quantidade da paginacao (tamanho)
* @return a lista baseada nos argumentos passados.
*/
public List<Estabelecimento> buscarEstabelecimentos(int first, int count) {
TypedQuery<Estabelecimento> query = EntityManagerHelper.getEntityManager().createQuery(
"From Estabelecimento e Order by e.nome ASC",
Estabelecimento.class);
query.setFirstResult(first);
query.setMaxResults(count);
return query.getResultList();
}
}
InstaPontoWebController.get().buscarEstabelecimentosTotal()