Перебор хэш-карты в JSP в приложении struts

У меня есть объект HashMap, который я получаю на странице JSP.

HashMap<Integer,Gift_product> gift_hm = new HashMap<Integer,Gift_product>();
gift_hm.put(17,new Gift_product("doll",67));

Теперь мне нужно повторить это и отобразить содержимое на JSP. Класс Gift_product содержит два поля: name и price.

Вывод JSP должен быть

serial no.           product name     price
17                    Doll            67

Как я могу достичь этого?


person Pedantic    schedule 15.06.2010    source источник
comment
Забавно... Я не добавлял часть дженериков в исходники (я просто переформатировал в код), но история изменений, кажется, не согласна с этим?   -  person rsp    schedule 15.06.2010
comment
@rsp: иногда дженерики интерпретируются как HTML-теги и вырезаются из форматированного вывода. Правильное форматирование сообщения в виде кода заставляет их отображаться. Используйте View source для ревизии, чтобы убедиться в этом.   -  person Joachim Sauer    schedule 15.06.2010


Ответы (2)


Проверьте тег struts <logic:iterate>. При переборе HashMap каждая запись представляет собой java.util.Map.Entry, чтобы получить ключ (в данном примере серийный номер) и значение (объект Gift_product), используйте свойства key и value следующим образом:

Сначала установите HashSet в качестве атрибута в вашем классе действий, например. request.setAttribute("gift_hm", gift_hm);, а затем в jsp:

<logic:iterate id="mapEntry" name="gift_hm">
  <bean:define id="gift" name="mapEntry" property="value">
  <tr>
    <td><bean:write name="mapEntry" property="key"></td>
    <td><bean:write name="gift" property="productName"></td>
    <td><bean:write name="gift" property="price"></td>
  </tr>
</logic:iterate>
person krock    schedule 15.06.2010
comment
он напрямую получает серийный номер, который находится в ключевой части, название продукта, которое находится в value.getProdutname(), и цену value.getPrice()... не совсем уверен.. - person Pedantic; 15.06.2010
comment
Я изменил его, чтобы напечатать ключ HashMap (mapEntry.getKey) в качестве серийного номера и вытащить объект Gift_product из mapEntry.getValue(). - person krock; 15.06.2010

Это работает для меня (struts2):

<s:iterator value="giftMap" var="giftMapElement">
    <s:set var="giftKey" value="#giftMapElement.key"/>
    <s:set var="giftValue" value="#giftMapElement.value"/>
    <tr>
        <td><s:property value="#giftKey"/></td>
        <td><s:property value="#giftValue.productName"/></td>
        <td><s:property value="#giftValue.price"/></td>
    </tr>
</s:iterator> 
person user007    schedule 04.09.2013