JSF ui:repeat e lista?

6 respostas Resolvido
javajsf
A

Tenho que imprimir em um xhtml o resultado de um SQL, a impressão tem que ser, como abaixo:

nome               descrição           data          valor
123 de Oliveira 4  
                   teste               01/01/2019    R$ 10,00
                   teste               01/01/2019    R$ 10,00
                   teste               01/01/2019    R$ 10,00

Total:                                               R$ 30,00

nome               descrição           data           valor 
aline              
                   teste               01/01/2019     R$ 10,00
                   teste               01/01/2019     R$ 10,00
                   teste               01/01/2019     R$ 10,00

    Total:                                            R$ 30,00

nome               descrição           data           valor 
aline1              
                   teste               01/01/2019     R$ 10,00
                   teste               01/01/2019     R$ 10,00
                   teste               01/01/2019     R$ 10,00

        Total:                                        R$ 30,00

O método retorna um List<Wrapper> e tentei usar um ui:repeat dentro de outro ui:repeat, mas não saiu como esperado.

Alguém tem alguma sugestão?

6 Respostas

L

Chegou a apresentar alguma coisa? Como vc está organizando os itens na tela? Qual elemento está usando?

A

Olá lucastody.

Obrigado pela resposta.
Apresenta sim. Os dados são impresso, como abaixo:

nome               descrição           data          valor
123 de Oliveira     4  teste          01/01/2019    R$ 10,00
123 de Oliveira     4  teste          01/01/2019    R$ 10,00
123 de Oliveira     4  teste          01/01/2019    R$ 10,00
aline                  teste          01/01/2019    R$ 10,00
aline                  teste          01/01/2019    R$ 10,00
aline                  teste          01/01/2019    R$ 10,00
aline1                 teste          01/01/2019    R$ 10,00
aline1                 teste          01/01/2019    R$ 10,00
aline1                 teste          01/01/2019    R$ 10,00


A organização correnta seria:

nome               descrição           data          valor
23 de Oliveira  4 
                   teste          01/01/2019    R$ 10,00
                   teste          01/01/2019    R$ 10,00
                   teste          01/01/2019    R$ 10,00

Total:                                             R$ 30,00

nome               descrição           data          valor
aline 
                   teste          01/01/2019    R$ 10,00
                   teste          01/01/2019    R$ 10,00
                   teste          01/01/2019    R$ 10,00

Total:                                             R$ 30,00

nome               descrição           data          valor
aline1
                   teste          01/01/2019    R$ 10,00
                   teste          01/01/2019    R$ 10,00
                   teste          01/01/2019    R$ 10,00

Total:                                             R$ 30,00
L

Eh, vc vai ter que fazer uma jogada com colspan e rowspan de acordo com os registro para cada nome.

A

Olá lucastody.

Pode ser uma solução.

Segue parte do código para você ter uma ideia melhor.

public List<Wrapper> listar(Integer id, Date dtInicio, Date dtFim) {
                             
       List<Wrapper> r = new ArrayList<Wrapper>();
    		
       .
       .
       .
       r = Wrapper.listFromArrayList(que.getResultList(), 
    					                          "id",
    					                          "nome",
    					                          "descricao",
    					                          "data",
    					                          "valor");
    		
        return r;
    		
}

public String pesquisar() {
		
        `List<Wrapper> lista = listar(id, dtInicio, dtFim);`
		
         return null;
}

O retorno do metodo listar é:

{"id": 1, "nome": "123 de Oliveira 4", "descricao": "teste", "data": "01/01/2019", "valor": 10.00}
{"id": 2, "nome": "123 de Oliveira 4", "descricao": "teste", "data": "01/01/2019", "valor": 15.00}
{"id": 3, "nome": "123 de Oliveira 4", "descricao": "teste", "data": "01/01/2019", "valor": 20.00}
{"id": 4, "nome": "aline", "descricao": "teste", "data": "01/01/2019", "valor": 10.00}
{"id": 5, "nome": "aline", "descricao": "teste", "data": "01/01/2019", "valor": 20.00}
{"id": 6, "nome": "aline", "descricao": "teste", "data": "01/01/2019", "valor": 30.00}
{"id": 7, "nome": "aline1", "descricao": "teste", "data": "01/01/2019", "valor": 10.00}
{"id": 8, "nome": "aline1", "descricao": "teste", "data": "01/01/2019", "valor": 20.00}
{"id": 9, "nome": "aline1", "descricao": "teste", "data": "01/01/2019", "valor": 30.00}

XHTML:

`<h:form>`
	           
        <c:forEach items="#{lista}" var="item">
		          	
	    <p>nome: #{item.nome}</p><br/>
	    <c:forEach items="${item.innerList}" var="item_s" from="0" to="${item.size()}" varStatus="itemstatus">
		       <p>${item_s[itemstatus.index]}</p><br/>
	    </c:forEach>
		          	
		          			
        </c:forEach>
		          
</h:form>

A variável item, no forEach, contém cada elemento da lista:

{"id": 1, "nome": "123 de Oliveira 4", "descricao": "teste", "data": "01/01/2019", "valor": 10.00}

O segundo forEach não funciona.

L

Bom, vi que vc não está usando uma estrutura em tabela para organizar os dados. Recomendo que pense numa solução utilizando uma tabela (vc vai precisar do colspan e rowspan).

E como vc está montando esse atributo: innerList do item?

A
Solucao aceita

Estou usando uma tabela. Achei melhor retirar do post.
O innerList é do item.

Achei uma solução melhor.

Criei uma classe, como abaixo:

public class TListar{
      campos

     Gets
    
     Sets

}

O metodo que retornava um List agora retorna List.
No metodo Listar manipulo o resultado da sql e coloco em cada variável na classe que criei.

Abrigado pela ajuda.

Criado 20 de maio de 2019
Ultima resposta 21 de mai. de 2019
Respostas 6
Participantes 2