Ola pessoal,
alguém podria me dizer se é possível utilizar o filter do exportação do
displaytag, sem utilizar a taglib displaytag? Bem que eu gostaria de utilizar o
displaytag, mas como a sua paginação ainda não é eficiente em termos de
listas muito longas (como o meu caso), eu não poderei utilizá-la. Mas ao
mesmo tempo gostaria de utilizar a feature de exportar (excel, pdf, csv, …),
para não ter que reescrever esta funcionalidade. Se for possível como eu
faço? Se não for possível, alguém me indicaria, alguma coisa já pronta que
faça exportação para excel?
Obrigado.
cara, eu uso o displaytag normalmente …
qual o problema q ve com listas longas???
qnt à sua pergunta, no site deles tem um passo a passo de como usar esse filter.
eu me guiei por ele deu td certo.
por sinal queria fazer uma certa propaganda desse componente.
Ele é ótimo, muito funcional e prático, recomendo!!!
Com o displaytag, se você tiver uma lista muito longa, tipo de 100.000 items,
ele sempre carrega todos os items em memória, e isso pode derrubar seu
servidor, o ideal, nesses casos, é fazer a paginação no banco de dados. Mas
a maioria dos drivers não suporta essa paginação de forma correta, mas pelo
menos ela não carrega todos os objetos (completos) em memória.
Tem como utilizar akele filter de exportação sem utilizar o displaytag?
Att.
é verdade.
esse é um ponto fraco do displaytag.
cara, nao sei dizer se dá pra usar o filter sem o displaytag.
mas tava pensando, será q esse lance de carregar toda a lista na memoria nao seria configuravel?!?!
vou dar uma olhada na especificação.
[quote=amdantas]mas tava pensando, será q esse lance de carregar toda a lista na memoria nao seria configuravel?!?!
[/quote]
Não é configurável. Esse problema já é antigo.
paginacao eh configuravel, entao desativa a paginacao e gera ela na mao. sao duas linhas de codigo no template e duas no dao para fazer paginacao.
todo o resto vc continua usando displaytag lib (eh assim que eu faco)
Eu ja implementei a paginação, mas no caso de paginação ser feita fora do
displaytag, e eu utilizar a feature de exportar do displaytag, no caso ela
somente faria a exportação da página corrente, não? Então eu teria que
tratar a requisição, se for para exportar, pegar toda a lista ao invés de
página, certo?
Valew!
perfeito…
uma acao a mais para exportar que pega a lista inteira se for para exportar ela inteira. no fim so esta usando a taglib para a parte de visualizacao e nao a parte de logica, que faz todo o sentido, uma vez que ela esta la na visualizacao
Vou ver como fica.
Qq coisa te falo, se eu tiver alguma dúvida, ok?
Valew Guilherme!
ae guilherme,
vc poderia mostrar como vc faz essa paginação em poucas linhas.
sem usar o displaytag eu me enrolo todo pra fazer na mão.
Guilherme,
vc poderia, por favor, me mostrar um exemplo de como vc usa para paginar sem displaytag e exibir e exportar utilizando o displaytag?
Ficaria muito grato.
Valew!
Entao, nao tenho codigo aqui comigo, mas eh o codigo que eu mostro em aula na Caelum, se bobear tem na apostila do fj-21 no nosso site.
De qualquer maneira:
Na sua classe de DAO crie um metodo chamado
List<Artigo> getLista(int inicial,int tamanho) {
// coloque aqui o codigo da sua paginacao
}
Usando o vraptor, temos uma classe de logica assim:
class ArtigoLogic {
private List<Artigo> artigos;
private int inicial = 0;
// gera o getArtigos (sem set) e getter e setter para inicial
public void pesquisaPaginada() {
// retorna com tamanho 10
inicial = Math.max(0,inicial);
this.artigos = new DaoFactory().getArtigoDao().getLista(inicial, 10);
}
}
E ai basta usar a acao de logic ara executar a pesquisa
Ja no template, basta colocar algo como:
Primeira pagina
Pagina anterior
Proxima pagina
E o misterio da ultima pagina fica no ar :). Tem que criar algo separado para a ultima pagina
Ok, ae você está me mostrando como fazer a paginação, mas eu gostaria de saber como vc faz pra gerar o excel, para diferenciar na action qual método chamar, o que retorna pagina, ou o que retorna o list, para exportação.
Valew
Oi Alexandre,
A logica que mostrei ai em cima eh a de paginacao. Se voce quer uma que nao faca
// pega alistagem completa
public void pesquisaCompleta() {
this.artigos = new DaoFactory().getArtigoDao().getLista(inicial, 10);
}
Ai eh so mapear direitinho no xml (que vai depender do seu framework). Novamente, no vraptor:
<package name="artigo">
<chain name="lista.paginada">
<logic class="ArtigoLogic" method="pesquisaPaginada"/>
<view>template.jsp</view>
</chain>
<chain name="lista.completa">
<logic class="ArtigoLogic" method="pesquisaCompleta"/>
<view>template.jsp</view>
</chain>
</package>
Portanto, no final ficam sendo:
- 4 linhas no xml (definicao da chain lista.paginada) que eh o mapeamento entre camadas
- 5 linhas de codigo novo no ArtigoLogic que eh sua logica de negocios
- 4 linhas no template com paginacao
Era isso?