1

问题:我正在使用 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;
    }   
}
  1. 在请求中设置地图

    request.setAttribute("categoryMap",catgrMap);
    

我想要什么:我想遍历这个 catgrMap 并读取它的键和值。以下是步骤:

  1. 从请求中获取地图:

    #set ($categoryMap= $request.get('attributes').get('categoryMap'))
    
  2. 迭代地图 - 有很多方法可以以速度迭代地图,这里是其中的一些。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

  3. 障碍:问题不在于我们如何迭代,而在于速度如何从请求中读取地图。它将地图读取为字符串对象,因此无法进行迭代。${categoryMap.class.name} 返回 String 而不是 Map。

将地图传递给速度并对其进行迭代的可能方法是什么?我们并不热衷于使用 ext-plugin。

4

0 回答 0