Dúvida forEach do JSTL [RESOLVIDO]

Oi Galera,

Tenho uma tabela no banco com 10 números, do 1 ao 10. Depois coloquei estes numeros numa lista no java, blz. Mas preciso mostrar esses numeros de 3 em 3 usando o forEach da JSTL:


<c:forEach var="dado" items="${dados}">
   <li>${dado.numero}</li>
</c:forEach>

Nesse caso a cada iteração ele vai mostrar de 1 em 1, existe uma forma de mostrar (a cada iteração) de 3 em 3 dentro da

  • ?
    Se puderem me ajudar agradeço. vlw.
  • kra, use o varStatus da tag e manipule as li

    <c:forEach var="dado" items="${dados}" varStatus="contador">   
    </c:forEach>  

    tipo , usando ${contador.count % 3 == 0} e ${contador.count % 3 > 1}

    Olá!
    Dá pra fazer assim tb:

    <% pageContext.setAttribute("dados",new int[]{1,2,3,4,5,6,7,8,9,10}); %> <c:forEach items="${dados}" var="dado" begin="0" step="3"> ${dado} </c:forEach>

    Esse código vai te dar a saída

    1 3 5 7 9

    Abs.

    Humm… quase galera

    mas vamos supor o seguinte, tenho uma lista de números do 1 ao 18, estou tentando colocar 2 forEach desta maneira:

    <c:forEach var="dado" items="${dados}" varStatus="contador">
    				<c:if test="${contador.count <= 3}">
    					<li>
    						<c:forEach var="dado" items="${dados}" varStatus="contador">
    			
    							<c:if test="${contador.count <= 6}">
    								${dado.numero}
    							</c:if>
    							
    						</c:forEach>
    					</li>
    				</c:if>
    			</c:forEach>

    pois preciso imprimir na primeira iteração, 1,2,3,4,5,6
    na segunda iteração: 7,8,9,10,11,12
    e na última: 13,14,15,16,17,18

    mas do jeito que estou fazendo é sempre (claro) impresso 1,2,3,4,5,6 em todas as iterações. Nesta parte do foreach que não estou conseguindo.
    entenderam?
    vlw de novo.

    Tente isso:

    &lt;c:forEach var="dado" items="${dados}" varStatus="contador"&gt;  
                    
             <li> ${dado.numero}</li>  
                     
             &lt;c:if test="${contador.count % 6 == 0}"&gt;
             
                    &lt;c:out value="&lt;br/&gt;"&gt;
              
             &lt;/c:if&gt;  
    
    &lt;/c:forEach&gt; 

    o resultado deve ser:

    linha 1 => 1 2 3 4 5 6
    linha 2 => 7 8 9 10 11 12
    linha 3 => 13 14 15 16 17 18

    espero que ajude!!!

    Então Jhonatan morais, no seu código você imprime um número por

  • , eu precisaria de 6 números por
  • , sendo que a cada 3, exista uma quebra de linha.
    E além disso esses números do 1 ao 18, não são estáticos, eles vão mudar. agora são do 1 ao 18, depois 1 ao 19… e por ai vai, por isso queria um jeito dinâmico de mostrar eles.

    algo assim:

    
    <li>
          1 2 3 
          4 5 6
    </li>
    
    <li>
          7 8 9
          10 11 12
    </li>
    
    <li>
          13 14 15
          16 17 18
    </li>
    

    ta um desafio aqui. haha

  • Pow motta essa tá facil. faz assim ó:

    <li>
     &lt;c:forEach var="dado" items="${dados}" varStatus="contador"&gt;    
                      
               ${dado.numero}   
                        
              &lt;c:if test="${contador.count % 3 == 0}"&gt;  
                
                     &lt;c:out value="&lt;br/&gt;"&gt;  
                 
              &lt;/c:if&gt;
    
              &lt;c:if test="${contador.count % 6 == 0}"&gt;  
                
                     &lt;c:out value="&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"&gt;  
                 
              &lt;/c:if&gt;
    
              &lt;c:if test="${contador.count % 18 == 0}"&gt;  
                
                     &lt;c:out value="&lt;/li&gt;"&gt;  
                 
              &lt;/c:if&gt;
    
    
    
        
       
    &lt;/c:forEach&gt;   
    

    Forte abraço, Motta

    e se essa for a solução lembrese de colocar [RESOLVIDO] no titulo do post ok!!!

    Opa da hora, mas ele imprime 1 vez a mais do que precisa né, porque na última vez o

  • é sempre aberto, não?
    vlw
  • brother

    troca essa linha

    &lt;c:if test="${contador.count % 6 == 0}"&gt;   

    por esta

    
    &lt;c:if test="${(contador.count % 6 == 0) && (contador.count != 18) }"&gt; 
    

    agora acho que vc ja entendeu a logica.

    se quiser fazer qualquer outro tipo de teste usa a class abaixo que ela vai te ajudar:

    public class Teste {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		System.out.println("<li>&quot;); 
    		 for(int i = 1; i&lt;=18; i++){
    			 
    					                     
    		            System.out.print(i+&quot; &quot;);   
    		                       
    		           if(i % 3 == 0) {   
    		                System.out.println();    
    		                
    		           } 
    		   
    		           if((i % 6 == 0)&& (i != 18)){    
    		               
    		                 System.out.println(&quot;</li>");    
    		                 System.out.println();
    		                 System.out.println("<li>");
    		                
    		           }
    		   
    		           if(i % 18 == 0){ 
    		               
    
    		                 System.out.println("</li>");    
    		                
    		           }
    		   
    		 }
    		   
    		       
    		      
    		  
    	}
    
    }
    
    
    

    até.

    blz, entendi sim. vlw brother.

    Olá ::MOTA::,
    embora o tópico esteja resolvido, achei uma solução que resolve o seu problema, segue código

    public class MyClass {
    
    	public MyClass() {
        }
    
    	public static void main(String[] args) {
    
    		int quantidadeTotal = 18;
    
    		System.out.print("<li>\n");
    
    		for(int i = 1; i <= quantidadeTotal; i++) {
    
    			if(i % 3 != 0) {
    				System.out.print(i + " ");
    			}
    			else if(i % 6 != 0) {
    				System.out.print(i + "\n");
    			}
    			else if(i < quantidadeTotal) {
    				System.out.print(i + "\n</li>\n\n<li>\n");
    			}
    			else {
    				System.out.print(i + "\n</li>");
    			}
    
    			if(i == quantidadeTotal && quantidadeTotal % 3 != 0) {
    				System.out.print("\n</li>");
    			}
    			else if(i == quantidadeTotal && quantidadeTotal == 3) {
    				System.out.print("</li>");
    			}
        	}
    	}
    }

    Resultado:

  • 1 2 3 4 5 6
  • 7 8 9 10 11 12
  • 13 14 15 16 17 18
  • Espero ter ajudado!
    Até mais