Проблема: я работаю над 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 в $ keys)
$ ключ
$ CategoryMap [$ ключ]
# Конец
2.3
#set ($map = $categoryMap.getMap() )
#foreach ($mapEntry in $map.entrySet())
$ mapEntry.key
$ mapEntry.value
# Конец
Контрольно-пропускной пункт: проблема не в том, как мы выполняем итерацию, а в том, как скорость считывает карту из запроса. Он читает карту как объект String, поэтому итерация невозможна. $ {CategoryMap.class.name} возвращает String, а не Map.
Каковы возможные способы передачи карты скорости и итерации по ней? Мы не заинтересованы в использовании ext-plugin.