2010-12-13 12 views
7

Estoy tratando de recorrer una Lista de mapas usando s: iterator. Puedo recorrer la Lista sin problemas, pero no puedo hacer que itere a través de las entradas del mapa. Hasta ahora lo he entendido:Iterar sobre una lista de mapas usando s: iterator

[..] 
<s:iterator value="records" status="recordsStatus" var="record"> 
     <s:if test="#recordsStatus.index ==0"> 
      <tr> 
       <td colspan="*"></td> 
      </tr> 
     </s:if> 
     <tr> 
      <s:iterator value="record.entrySet()" status="fieldStatus"> 
      <td> 
       <s:property value="key"/>/<s:property value="value"/> 
      </td> 
      </s:iterator> 
     </tr> 
    </s:iterator> 
[..] 

La marca genera el

<tr></tr> 

para cada entrada, pero no va throug el segundo iterador, así que supongo que estoy haciendo algo mal el atributo de valor. ¿Puedes ayudarme con eso?

Gracias

José

Respuesta

12

Aquí es una demostración de que los bucles a través de listas de mapa:

import com.opensymphony.xwork2.ActionSupport; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 


public class mapTest extends ActionSupport { 
    public List<Map> listmap; 

    public String execute(){ 
    listmap = new ArrayList(); 
    Map map = new HashMap(); 
    map.put("a", "alpha"); 
    map.put("b", "bravo"); 
    map.put("c", "charlie"); 
    listmap.add(map); 
    Map map2 = new HashMap(); 
    map2.put("d", "delta"); 
    map2.put("e", "echo"); 
    map2.put("f", "foxtrot"); 
    listmap.add(map2); 
    return SUCCESS; 
    } 
} 

Aquí está el JSP para hacerlo:

<%@taglib prefix="s" uri="/struts-tags"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <body> 
     <h1>Map Test</h1> 
     <table> 
      <thead> 
       <tr> 
        <th>List #</th> 
        <th>key</th> 
        <th>value</th> 
       </tr> 
      </thead> 
      <tbody> 
       <s:iterator value="listmap" status="stat"> 
        <s:iterator> 
         <tr> 
          <th><s:property value="#stat.index"/></th> 
          <td><s:property value="key"/></td> 
          <td><s:property value="value"/></td> 
         </tr> 
        </s:iterator> 
       </s:iterator> 
      </tbody> 
     </table> 
    </body> 
</html> 

Nota del interior iterator es sensible al contexto, usará el último valor insertado en la pila. El atributo de estado nos da un objeto IteratorStatus en cada iteración que es útil si queremos conocer la iteración actual.

+1

¡Gracias !. Funcionó perfectamente. –

Cuestiones relacionadas