Java 从<;的树映射中检索值时出现问题;id,beans>;在JSP中
一段时间以来,我一直在尝试从包含的树映射中检索值时遇到问题。我尝试了几种不同的方法来访问数据,但我得到的最远结果是JSP承认存在哈希或树映射,但实际上没有遍历它并返回数据 我一直在试图找到一种基于标记属性对xml结果进行基本排序的最佳方法。因此,我获取xml并将每个xml的值放入一个bean中,然后获取,然后将bean放入一个树映射中,其中Key=SortId。由于treema自动排序,因此结果是XML值的排序映射。bean和treeMap的填充工作得很好,问题只是将这些值拉到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中 好吧,也
好吧,也许更好地说明我的结果图将有助于至少了解我想要了解的内容。目标是在新排序的列表中循环,并用如下内容填充我的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>