尝试从包含一段时间的treeMap中检索值时遇到问题。我尝试了几种不同的访问数据的方法,但是我得到的最充分的结果是让JSP承认有一个Hash或Tree Map,但实际上并没有遍历它并返回数据。
我一直在尝试寻找最好的方法,以便根据tag属性对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)}
我的问题是,使用上面的代码,即使输出地图本身确实显示了它的位置,我也没有从地图的第一级迭代返回任何值。
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>
尽管有问题更新,但我仍然不明白您在视图方面到底需要什么。太模糊了。
无论如何,每次c:forEach对a的迭代Map都会给您一个Map.Entry反过来具有getKey()和getValue()方法的。
c:forEach
Map
Map.Entry
getKey()
getValue()
这是一个基本示例:
<c:forEach items="${map}" var="entry"> key = ${entry.key}, value = ${entry.value}<br> <c:forEach>
这些知识应该可以帮助您入门。
更新 :我仍然不明白您在处理 两张 地图,以及为什么确切地需要a Map而不是a,List因为您似乎对按键不感兴趣。因此,这是一个仅包含一个映射和一个简单servlet类的示例,该类正在预处理请求。
List
首先是(简化的)Tile类:
Tile
public class Tile { private String name; private String description; private string imagepath; // Add/generate c'tor/getters/setters/etc. }
预处理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);
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顺便说一句)
jsp:useBean