Итерация по списку карт с помощью s: iterator - PullRequest
8 голосов
/ 13 декабря 2010

Я пытаюсь перебрать список карт, используя 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>
[..]

Тег генерирует

<tr></tr>

для каждой записи, но это не происходит через второй итератор, поэтому я предполагаю, что я что-то не так с атрибутом значения Можете ли вы помочь мне с этим?

Спасибо

Jose

1 Ответ

14 голосов
/ 14 декабря 2010

Вот демонстрационная программа, которая перебирает списки карты:

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;
  }
}

Вот JSP, чтобы отобразить его:

<%@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>

Обратите внимание, что внутренний итератор является чувствительным к контексту, который он будет использоватьпоследнее значение помещено в стек.Атрибут status дает нам объект IteratorStatus для каждой итерации, что полезно, если мы хотим узнать текущую итерацию.

...