Проблема Получение значений из TreeMapв JSP - PullRequest
0 голосов
/ 13 декабря 2010

У меня были проблемы при попытке получить значения из treeMap, который содержится в течение некоторого времени.Я испробовал несколько различных способов доступа к данным, но JSP дал понять, что JSP должен признать наличие карты хэша или дерева, но на самом деле не перебирать ее и возвращать данные.

Я пытался найти лучший способ в основном сортировать результаты XML на основе атрибута тега.Поэтому я беру xml и помещаю значения каждого в bean-компонент, затем беру, затем помещаю bean-компоненты в древовидную карту, где Key = SortId.Поскольку treema автоматически сортирует результат, это отсортированная карта значений XML.Популяция bean и treeMap работает отлично, проблема заключается в том, чтобы просто вытянуть эти значения в JSP

Что ж, возможно, лучшая иллюстрация моей результирующей карты поможет, по крайней мере, понять смысл того, что я пытаюсь получить,Цель состоит в том, чтобы перебрать недавно упорядоченный список и заполнить мои элементы div чем-то вроде

<div>
Name: ${tileName} <br />
Description: ${tileDescrip} <br />
<img scr="${imagePath}">
</div>

, получившаяся карта дерева выглядит следующим образом

sortedHash

{0, bean(tileName,tiledescrip,imagePath)}
{1, bean(tileName,tiledescrip,imagePath)}
{2, bean(tileName,tiledescrip,imagePath)} 

Myпроблема заключается в том, что с помощью приведенного выше кода я не получаю никаких значений, возвращаемых даже из итерации первого уровня карты, даже если вывод самой карты действительно показывает ее там в

sortedHash = CTTeamsiteXMLHash@135b24b 

, поэтому поток псевдочто я делаю

Read XML
- Iterate
     -Parse XML Values to bean
  -Place bean in Treemap<SortId, XML-Bean>
-Return TreeMap
-Loop through treemap and then pull each bean value out. 

Вот пример XML

<teaser>
<sort>1</sort>
<value1></value1>
<value2></value2>
</teaser>

Мой компонент

public class CTTeamsiteXMLHash {


private HashMap<String, Object> xmlHash;
private TreeMap<String, Object> sortedHash;


public TreeMap<String, Object> getSortedHash() {
 return sortedHash;
}

public void setSortedHash(TreeMap<String, Object> sortedHash) {
 this.sortedHash = sortedHash;
}

public void setXmlHash(String sortOrder, CTTeamsiteXMLBean bean) {
 getXmlHash().put(sortOrder, bean);

}

public HashMap<String, Object> getXmlHash() {
 return xmlHash;
}

Вот моя неудачная попытка доступа из JSP.если это помогает, я передаю sortedHash в запросе

     <jsp:useBean id="sortedHash" class="CTTeamsiteXMLHash"
 scope="request"/>
     <c:forEach items="${sortedHash.sortedHash}"
 var="eachItem">
       <c:forEach items="${eachItem.value}"
 var="anItem">
          <c:out value="${anItem.tileName.value}" /> :
 <c:out
 value="${anItem.tileDescrip.value}" />
       </c:forEach>
     </c:forEach>

1 Ответ

1 голос
/ 13 декабря 2010

Несмотря на обновление вопроса, я все еще не понимаю, что именно вам нужно со стороны обзора.Это слишком расплывчато.

В любом случае, каждая c:forEach итерация по Map даст вам Map.Entry, который, в свою очередь, имеет методы getKey() и getValue().

Вот базовый пример:

<c:forEach items="${map}" var="entry">
    key = ${entry.key}, value = ${entry.value}<br>
<c:forEach>

Это знание должно помочь вам начать.

См. Также:


Обновление : я все еще не понимаю, что выделать с двумя картами и почему именно вам нужно Map вместо List, так как вас не интересуют ключи.Итак, вот пример только с одной картой и простым классом сервлета, который обрабатывает запрос.

Сначала (упрощенный) Tile класс:

public class Tile {
    private String name;
    private String description;
    private string imagepath;
    // Add/generate c'tor/getters/setters/etc.
}

Сервлет предварительной обработки:

Map<Integer, Tile> map = new TreeMap<Integer, Tile>();
map.put(1, new Tile("name1", "description1", "imagepath1"));
map.put(2, new Tile("name2", "description2", "imagepath2"));
map.put(3, new Tile("name3", "description3", "imagepath3"));
// ...

request.setAttribute("map", map); // It'll be available as ${map} in JSP.
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);

JSP:

<c:forEach items="${map}" var="entry">
    <div>
        Map key: ${entry.key}<br>
        Tile name: ${entry.value.name}<br>
        Tile description: ${entry.value.description}<br>
        Tile image: <img src="${entry.value.imagepath}">
    </div>
</c:forEach>

(кстати, не нужно jsp:useBean)

...