Datatable Listagem

9 respostas
CamilaLopes

Bom dia pessoal,estou com uma duvida no datatable.Estou querendo listar a partir da query

public List<Matricula> listarQTDAlunosPorEscola() {
        Session sessao = sf.openSession();
        Query query = null;
        query = sessao.createSQLQuery("select e.nomeDaEscola,count (a.nome) \n"
                + "from Matricula m,Aluno a,Escola e \n"
                + "where a.id = m.aluno_id and e.id = m.escola_id \n"
                + "group by e.nomeDaEscola\n"
                + "order by e.nomeDaEscola");
        List<Matricula> qtdAlunosPorEscola = query.list();
        sessao.close();
        return qtdAlunosPorEscola;


    }

Minha query ja tem os valores que eu quero eu queria so jogar esta query em um datatable e pronto sem ter que colocar os valores que quero la na view.
Aguardo respostas.
Obrigada.

9 Respostas

Rafael_Guerreiro

Aconteceu algum erro? Você chegou a executar isso?

Pelo o que eu entendi, você está tentando mapear 1 coluna e um count em uma entidade que já existe.

Isso não vai funcionar por 2 motivos:
1 - O que você está retornando não é uma Matricula, logo, isso: List<Matricula> qtdAlunosPorEscola = query.list(); não funciona.
2 - Para isso funcionar, você precisaria trazer todas as colunas de Matricula e ainda dizer ao Hibernate que você está querendo mapear essa Query em determinada entidade. Basta olhar o JavaDoc do Hibernate, é um método que você coloca depois do método createSQLQuery.

Se você não informar a entidade que o Hibernate deve mapear, ele vai retornar uma Lista de Array de Object, ou seja, isso: List<Object[]>

Então, para cada registro da sua lista, ficaria algo assim:

List&lt;Object[]&gt; list = query.list();
for (Object[] objs : list)
   System.out.println("Escola: " + objs[0] + " - count: " + objs[1]);
CamilaLopes

Tem outra forma de fazer?

Rodrigo_Sasaki

Como assim outra maneira? A que ele sugeriu não te atende?

Você pode criar uma class que mantenha esses atributos caso acha mais correto, mas do jeito que ele exemplificou você já consegue exibir na sua dataTable

CamilaLopes

Tem algum exemplo onde eu possa ver para me orientar?

CamilaLopes

Segui o modelo de Rafael Guerreiro mais na datatable esta exibindo como objeto - [Ljava.lang.Object;@287f8987
O que faco?

Rodrigo_Sasaki

Nos mostre o seu código, fica mais fácil de entender onde pode estar o problema

CamilaLopes

DaoIMp

public List<Object[]> listarQTDAlunosPorEscola() {
        Session sessao = sf.openSession();
        Query query = null;
        query = sessao.createSQLQuery("Select e.nomedaescola,count(a.nome) FROM Matricula m,Aluno a,Escola e \n"
                + "                 where a.id = m.aluno_id and e.id = m.escola_id \n"
                + "                group by e.nomedaescola order by e.nomedaescola");
        List<Object[]> escola = query.list();
        for (Object[] objs : escola) {
            Object escolas = objs[0].toString();
            String contador = objs[1].toString();
            
          System.out.println("Escola: " + escolas + "    Qtd. Alunos: " +contador);
         
        }
        sessao.close();
        return escola;
    }

Bean

@ManagedBean
@ViewScoped
public class AlunoBean {


    private Aluno aluno;
    private AlunoDaoImp dao;
    private List<Object[]> qtdAlunosPorEscola;
    

    public AlunoBean() {
        aluno = new Aluno();
        dao = new AlunoDaoImp();
        qtdAlunosPorEscola = dao.listarQTDAlunosPorEscola();
        
    }

    public List<Object[]> getQtdAlunosPorEscola() {
        return qtdAlunosPorEscola;
    }

    public void setQtdAlunosPorEscola(List<Object[]> qtdAlunosPorEscola) {
        this.qtdAlunosPorEscola = qtdAlunosPorEscola;
    }

 
}

View

<p:dataTable id="alunos" var="alunos"  value="#{alunoBean.qtdAlunosPorEscola}" paginator="true" rows="10" style="width: 880px;margin-top: 10px;font-size: 12px" rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}" rowIndexVar="rowIx" rowsPerPageTemplate="5,10,15">  
                                <f:facet name="header">
                                    <p:outputPanel>
                                        <h:outputText value="Relatório de quantidade de alunos por escola" />
                                    </p:outputPanel>
                                </f:facet>
                                
                               <p:column>  
                                    <f:facet name="header">  
                                        <h:outputText value="Resultado" />  
                                    </f:facet>  
                                    <h:outputText value="#{alunos}" />  
                                </p:column>
                                
                            </p:dataTable>

OBS:So esta saindo o objeto na listagem.

Rodrigo_Sasaki
como você tem um array você precisa mostrar qual índice você quer exibir. Fica algo mais ou menos assim:
<p:column>    
    <f:facet name="header">    
        <h:outputText value="Nome" />    
    </f:facet>    
    <h:outputText value="#{alunos[0]}" />    
</p:column>

<p:column>    
    <f:facet name="header">    
        <h:outputText value="Quantidade" />    
    </f:facet>    
    <h:outputText value="#{alunos[1]}" />    
</p:column>
CamilaLopes

Obrigado era isso mesmo que faltava.

Criado 24 de abril de 2014
Ultima resposta 25 de abr. de 2014
Respostas 9
Participantes 3