问题从JSP </id,>中的<id,beans =“”>的TreeMap中检索值

时间:2010-12-13 01:17:29

标签: java jsp map jstl

我一直在尝试从包含一段时间的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>

1 个答案:

答案 0 :(得分:1)

尽管有问题更新,我仍然不明白你在视图方面究竟需要什么。这太模糊了。

无论如何,对c:forEach的每次Map次迭代都会为您提供Map.Entry,而Iterating over arraylist inside hashmap in JSTL又有getKey()getValue()方法。

这是一个基本的例子:

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

这些知识可以帮助你开始。

另见:


更新:我仍然不明白你用两个地图做了什么,为什么你需要一个Map而不是{{1因为你似乎对密钥不感兴趣。所以,这是一个只有一个map和一个简单的servlet类的例子,它正在预处理请求。

首先是(简化的)List类:

Tile

预处理servlet:

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

JSP:

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

(顺便说一下,不需要<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>