Fala pessoal,
Estou trabalhando com extjs + vraptor e precisei fazer a paginação de uma Grid.
Eu precisei retornar o total de registros no Json, para que o extjs grid fizesse a paginação corretamente.
Criei a nova classe, FlexGrid, de acordo este tópico, http://www.guj.com.br/java/290991-erro-vraptor-3-e-jqgrid.
Então resolveu o problema do número total de registros.
Mas o problema é que antes, eu fazia os includes (no result), de outras classes associadas ao Objeto principal:
result.use(Results.json()).withoutRoot().from(vendas)
.include("cliente").include("cliente.pessoa")
.include("vendedor").include("vendedor.colaborador").include("vendedor.colaborador.pessoa")
.serialize();
Mas agora, com o result da seguinte forma:
result.use(Results.json()).withoutRoot().from(grid)
.include("rows")
.include("cliente").include("cliente.pessoa")
.include("vendedor").include("vendedor.colaborador").include("vendedor.colaborador.pessoa")
Eu não consigo mais ter acesso aos objetos relacionados e obtenho o seguinte erro:
Como eu poderia resolver isso?
Obrigado desde já.
o .recursive() não funciona pra vc?
Lucas,
tentei de todas as combinações possíveis aqui e dá o seguinte erro:
Talvez eu não esteja colocando corretamente o .recursive().
Vou postar boa parte do código para melhor entendimento.
Classe FlexGrid:
public class FlexGrid<T> {
private Long page = (long) 1;
private Long total;
private List<T> rows;
public FlexGrid(List<T> rows) {
this.total = (long) rows.size();
this.rows = rows;
}
No controller:
List<VendaCabecalho> vendas = dao.lista(start, limit);
FlexGrid<VendaCabecalho> grid = new FlexGrid<VendaCabecalho>(vendas);
result.use(Results.json()).withoutRoot().from(grid)
.include("rows")
.include("cliente").recursive().
.include("cliente").include("cliente.pessoa").recursive()
.include("vendedor").include("vendedor.colaborador").include("vendedor.colaborador.pessoa").recursive()
.serialize();
E a classe VendaCabecalho:
public class VendaCabecalho {
private Integer id;
private Cliente cliente;
...
}
Após eu passar a list de Objetos para o FlexGrid, perco a referência ao objetos associados, acho que é isso…
é pra ser somente isso:
result.use(Results.json()).withoutRoot().from(grid).recursive().serialize();
se não funcionar, é melhor criar um VO/DTO com os dados que vc quer serializar e transformar a sua lista para uma lista desse VO/DTO.
Lucas,
Não funcionou com o .recursive().
Na verdade, imagino eu, como o próprio nome diz, os “selects”, iam recursivamente em todas as associações até chegar ao ponto que dava erro de “session was closed”.
Eu resolvir criar uma flex grid onde no List definir seu tipo de Classe:
public class FlexGrid<T> {
private Long page = (long) 1;
private Long total;
private List<VendaCabecalho> rows;
public FlexGrid(List<VendaCabecalho> rows) {
this.total = (long) rows.size();
this.rows = rows;
}
Aí, foi e funcionou. 
Flw Lucas, obrigado por sua ajuda!