一尘不染

从TreeMap中检索值的问题 在JSP中

jsp

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

阅读 231

收藏
2020-06-10

共1个答案

一尘不染

尽管有问题更新,但我仍然不明白您在视图方面到底需要什么。太模糊了。

无论如何,每次c:forEach对a的迭代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类的示例,该类正在预处理请求。

首先是(简化的)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顺便说一句)

2020-06-10