Skip to content

Instantly share code, notes, and snippets.

@iskigow
Created November 8, 2012 00:12
Show Gist options
  • Save iskigow/4035553 to your computer and use it in GitHub Desktop.
Save iskigow/4035553 to your computer and use it in GitHub Desktop.
Mostra um modo (usando LazyDataModel) de tratar o problema com a paginação uma listagem com filtros, quando a página selecionada é maior que a quantidade de páginas necessárias para exibir o resultado da listagem (filtrada).
public class LazyProdutoDataModel extends LazyDataModel<Produto> {
// ...
private ProtudoService produtoService;
// ...
@Override
public List<Produto> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
// ...
/*
* Retorna a primeira página em caso de o usuário estar em uma página
* cuja não será preenchida pela busca, pois a mesma (busca) restornou
* menos elementos e será exibida em um numero menor de página(s).
*/
setRowCount(produtoService.contarProdutos( vendedor, filter ));
if (getRowCount() <= first) {
filter.setPrimeiroResultado(0);
/*
* Ou se achar necessário sempre que isso acontecer ir
* para a ultima página do novo resultado
*/
// filter.setPrimeiroResultado( (getRowCount()/pageSize)*(pageSize)
// - getRowCount() % pageSize == 0 ? pageSize : 0 );
}
// ...
}
// ...
}
public class ProdutoController {
@Inject
private MeuService meuService;
// ...
public void filtrarResultados(){
lazyModel = new LazyProdutoDataModel(meuService, filtro, vendedor, empresa);
}
// ...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment