2011-01-25 20 views
5

Ho un HashMap, che viene messa alla richiesta:Accesso valore hashmap dalla variabile in JSP

HashMap<Integer, String> myMap = ... 
request.setAttribute("myMap", myMap); 

In JSP Ho un ciclo foreach

<c:forEach items="${list}" var="item" varStatus="status"> 
    <c:out value="${item.description}"/> 
    <c:out value="${myMap[item.id]}"/> 
</c:forEach> 

ma ${myMap[item.id]} non funziona. Come posso accedere al valore di hashmap tramite la variabile item.id?

risposta

4

In EL, i numeri vengono trattati come Long. Cambia il tuo Map in modo che sia Map<Long, String> e funzionerà.

+0

C'è un caso speciale per 'HashMap ' perché ho provato questo '$ {applicationscope.coursesHT [anotherbean.courseC]}' per ottenere la descrizione, naturalmente, ma non ha funzionato ma quando uso 'c: set' e' c: out' ha funzionato !! :) Grazie – shareef

3

Penso che l'attributo id di bean non sia un oggetto wrapper (Integer id;). Dai un'occhiata alla pagina doc di Map.

testo da JavaDoc

Nota: grande cura deve essere esercitata se oggetti mutabili sono utilizzati come chiavi della mappa. Il comportamento di una mappa non viene specificato se il valore di un oggetto viene modificato in un modo che influisce su uguali confronti mentre l'oggetto è una chiave nella mappa. Un caso speciale di questa proibizione è che non è consentito per una mappa contenere come chiave. Mentre è ammissibile per una mappa di contenere se stesso come un valore, estrema cautela è consigliata : i pari e hashCode metodi non sono più ben definiti su un una mappa tale.

Item.java

package com.me; 

public class Item { 
    private Integer id; 
    private String description; 

    public Item() { 
    } 

    public Item(Integer id, String description) { 
     this.id = id; 
     this.description = description; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

} 

JSP frammento

<% 
HashMap<Integer, String> myMap = new HashMap<Integer, String>(); 
myMap.put(new Integer(1), "One"); 
myMap.put(new Integer(2), "Two"); 
myMap.put(new Integer(3), "Three"); 
request.setAttribute("myMap", myMap); 

List<com.me.Item> list=new ArrayList<com.me.Item>(); 
list.add(new com.me.Item(1,"A - Desc")); 
list.add(new com.me.Item(2,"B - Desc")); 
list.add(new com.me.Item(3,"C - Desc")); 
request.setAttribute("list", list); 
%> 

<c:forEach items="${list}" var="item" varStatus="status"> 
    <c:out value="${item.description}"/> 
    <c:out value="${myMap[item.id]}"/> 
</c:forEach> 
2

si può mettere il valore-chiave in una mappa su Java lato e accedere allo stesso utilizzando JSTL sulla JSP pagina come di seguito:

java Prima 1.7:

Map<String, String> map = new HashMap<String, String>(); 
map.put("key","value"); 

Java 1.7 e superiori:

Map<String, String> map = new HashMap<>(); 
map.put("key","value"); 

JSP Snippet:

<c:out value="${map['key']}"/> 
Problemi correlati