开发者

Issue Retrieving values from a TreeMap of <id, beans> in JSP

开发者 https://www.devze.com 2023-01-30 10:17 出处:网络
I have been have issues trying to retrieve the values from a treeMap that containsfor some time.I have tried several different methods of accessing the data, but the furthest i have gotten was for the

I have been have issues trying to retrieve the values from a treeMap that contains for some time. I have tried several different methods of accessing the data, but the furthest i have gotten was for the JSP to acknowledge there was a Hash or Tree Map, but not actually iterate through it and return data.

I have been trying to find the best way to basically sort xml results based on the tag attribute . So I am taking the xml and putting the values of each into a bean, then taking, then placing the beans in a treemap where Key=SortId. Since treema automatically sort the result is a sorted map of XML values. The population of the bean and treeMap works fine the issue is just pulling those values out in to the JSP

Well perhaps better illustrating my resulting map will help at least get the point across of what i'm trying to get . The goal is to loop through the newly ordered list and populate my divs with something like

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

the resulting tree map looks like this

sortedHash

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

My issue is that with the code above, I am not getting any values returned back from even the first level iteration of the map even though outputting the map itself does show its there at

sortedHash = CTTeamsiteXMLHash@135b24b 

so the Pseudo flow of what i'm doing

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. 

Here's sample XML

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

My Component

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

He开发者_如何学Cre is my failed Attempt at accessing from JSP. if it helps, i am passing the sortedHash in the request as well

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


Despite of the question update, I still don't understand what exactly you need in the view side. It's all too vague.

Anyway, every c:forEach iteration over a Map will give you a Map.Entry which in turn has getKey() and getValue() methods.

Here's a basic example:

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

This knowledge should get you started.

See also:

  • Iterating over arraylist inside hashmap in JSTL
  • Hidden features of JSP/Servlet

Update: I still don't understand what you're doing with two maps and why exactly you need a Map instead of a List since you don't seem to be interested in the keys. So, here's an example with only one map and a simple servlet class which is preprocessing the request.

First the (simplified) Tile class:

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

The preprocessing servlet:

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

The 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>

(no need for jsp:useBean by the way)

0

精彩评论

暂无评论...
验证码 换一张
取 消