问题:我正在使用 Liferay 6.0.5。我想从请求中读取 java 映射并在速度模板中对其进行迭代。速度无法将其读取为地图,而是将其视为字符串值。
JSP代码: 1.阅读分类:
List<AssetCategory> curCategories = assetEntry.getCategories();
Map<String, String> catgrMap=new HashMap<String, String>();
String temp="";
String key=null;
for (AssetCategory category : curCategories) {
key=(AssetVocabularyServiceUtil.getVocabulary(category.getVocabularyId())).getName();
if(!temp.equalsIgnoreCase(key)){
catgrMap.put(key,category.getName());
temp=key;
}else{
String val=(String)catgrMap.get(key);
val=val+","+category.getName();
catgrMap.put(key,val);
temp=key;
}
}
在请求中设置地图
request.setAttribute("categoryMap",catgrMap);
我想要什么:我想遍历这个 catgrMap 并读取它的键和值。以下是步骤:
从请求中获取地图:
#set ($categoryMap= $request.get('attributes').get('categoryMap'))
迭代地图 - 有很多方法可以以速度迭代地图,这里是其中的一些。2.1
#foreach ($mapEntry in $categoryMap.entrySet()) <tr> <td>$mapEntry.key</td> <td>$mapEntry.value</td>
#结尾
2.2 #set( $keys = $categoryMap.keySet() )
#foreach( $key in $keys ) $key $categoryMap[$key] #end
2.3 #set ($map = $categoryMap.getMap() ) #foreach ($mapEntry in $map.entrySet())
$mapEntry.key $mapEntry.value #end
障碍:问题不在于我们如何迭代,而在于速度如何从请求中读取地图。它将地图读取为字符串对象,因此无法进行迭代。${categoryMap.class.name} 返回 String 而不是 Map。
将地图传递给速度并对其进行迭代的可能方法是什么?我们并不热衷于使用 ext-plugin。