Java 从<;的树映射中检索值时出现问题;id,beans>;在JSP中

Java 从<;的树映射中检索值时出现问题;id,beans>;在JSP中,java,jsp,map,jstl,Java,Jsp,Map,Jstl,一段时间以来,我一直在尝试从包含的树映射中检索值时遇到问题。我尝试了几种不同的方法来访问数据,但我得到的最远结果是JSP承认存在哈希或树映射,但实际上没有遍历它并返回数据 我一直在试图找到一种基于标记属性对xml结果进行基本排序的最佳方法。因此,我获取xml并将每个xml的值放入一个bean中,然后获取,然后将bean放入一个树映射中,其中Key=SortId。由于treema自动排序,因此结果是XML值的排序映射。bean和treeMap的填充工作得很好,问题只是将这些值拉到JSP中 好吧,也

一段时间以来,我一直在尝试从包含的树映射中检索值时遇到问题。我尝试了几种不同的方法来访问数据,但我得到的最远结果是JSP承认存在哈希或树映射,但实际上没有遍历它并返回数据

我一直在试图找到一种基于标记属性对xml结果进行基本排序的最佳方法。因此,我获取xml并将每个xml的值放入一个bean中,然后获取,然后将bean放入一个树映射中,其中Key=SortId。由于treema自动排序,因此结果是XML值的排序映射。bean和treeMap的填充工作得很好,问题只是将这些值拉到JSP中


好吧,也许更好地说明我的结果图将有助于至少了解我想要了解的内容。目标是在新排序的列表中循环,并用如下内容填充我的div

<div>
Name: ${tileName} <br />
Description: ${tileDescrip} <br />
<img scr="${imagePath}">
</div>
我的问题是,使用上面的代码,即使输出映射本身时确实显示了它的位置,我也不会从映射的第一级迭代返回任何值

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
-迭代
-将XML值解析为bean
-把豆子放在树上
-返回树映射
-循环树映射,然后提取每个bean值。
下面是示例XML

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

1.
我的组件

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;
}
公共类CTTeamsiteXMLHash{
私有HashMap-xmlHash;
私人树形地图;
公共树映射getSortedHash(){
返回达什;
}
公共空间集合分类法(树形图分类法){
this.sortedHash=sortedHash;
}
公共void setXmlHash(字符串排序器,CTTeamsiteXMLBean){
getXmlHash().put(sortOrder,bean);
}
公共HashMap getXmlHash(){
返回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>

:

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

无论如何,在
Map
上的每一次
c:forEach
迭代都会给您一个值,而这个值又有
getKey()
getValue()
方法

以下是一个基本示例:

<c:forEach items="${map}" var="entry">
    key = ${entry.key}, value = ${entry.value}<br>
<c:forEach>
预处理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);
Map Map=newtreemap();
地图放置(1,新磁贴(“名称1”、“说明1”、“图像路径1”);
地图放置(2,新磁贴(“名称2”,“描述2”,“图像路径2”);
地图放置(3,新磁贴(“名称3”,“描述3”,“图像路径3”);
// ...
setAttribute(“map”,map);//它将在JSP中以${map}的形式提供。
request.getRequestDispatcher(“/WEB-INF/page.jsp”).forward(请求,响应);
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>

映射键:${entry.key}
磁贴名称:${entry.value.name}
磁贴说明:${entry.value.description}
平铺图像:

(顺便说一下,不需要
jsp:useBean

功能需求不明确,代码也不是真正的自文档化,失败尝试的示例对理解需求没有多大帮助。我建议编辑您的问题,以更详细地描述功能需求,和/或添加伪代码或普通Java代码中的示例在地图上迭代,使用
for
循环等等。这样可以更容易地将其转换为JSTL方法。对不起,我忘记了,在过去的两天里,每个人都没有看到与我相同的东西。我已经更新了我的描述,希望它能对我试图做的事情有所启发,也许更好地说明我的研究ulting map至少有助于理解我试图获取的内容。生成的树映射如下所示:
{Key,value}
{0,bean(tileName,tiledescrip,iagePath)}-{1,bean(tileName,tiledescrip,iagePath)}-{2,bean(tileName,tileScrip,iagePath)}

。我的问题是,使用上面的代码,即使输出映射本身在sortedHash=CTTeamsiteXMLHash@135b24bYou然后需要访问bean属性,比如
${entry.value.tileName}
。我仍然遇到的问题是,出于某种原因,我的forEach甚至没有确认地图。我是否应该使用它来将全局组件拉到页面上?请参阅答案更新。希望这能让您走上正确的方向。我觉得您在过度复杂化事情。您可能对过度复杂化的看法是正确的ion,这个方法似乎奏效了…非常感谢BalusC
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>