2015-07-15 4 views
0

Я начал работать в Sightly только на этой неделе, поэтому я довольно новичок в этом. Но, работая с ним, я получил требование передачи данных с внешнего интерфейса на передний план в виде Карты, содержащей ключи типа страницы, и соответствующие значения типа списка, как видно из следующей подписи:Как перемещаться по карте, имеющей ключи типа объекта, с помощью Sightly?

  public Map<Page, List<Page>> getComponentMap(); 

Теперь документация на https://goo.gl/sylWTW утверждает, что карта может быть пройден следующим образом:

<p data-sly-repeat="${myMap}"> 
     <span>key: ${item}</span> 
     <span>value: ${myMap[item]}</span> 
    </p> 

но, когда я попытался это, она работает, если ключи имеют тип строки, но не если я передаю ключи других типов объектов, например типа «Страница» в моем случае. Я попытался следующий код и работаю для отображения ключей, но бросает Недопустимый аргумент Exception после добавления линии № 6:

1 <div data-sly-use.jcomp="JavaComponent"> 
2  <ul data-sly-repeat.page="${jcomp.componentMap}"> 
3  <li> 
4   <ul> 
5    <li class="parent"><a href="${page.path}.html">${page.title} :</a></li>    
6    <li data-sly-repeat.subpage="${jcomp.componentMap[page]}"><a href="${subpage.path}.html">${subpage.title} </a></li> 
7   </ul> 
8  </li> 
9  </ul> 
10 </div> 

Списков прекрасно работают для любого типа объектов, так и для моего требования о собственности Пейджа, Путь и «Дети», я достиг этого, используя список карт, где Map содержит имена требуемой информации страницы.

Я не знаю, должно ли оно быть таким или нет для Карты, или я делаю что-то неправильно, но было бы очень полезно узнать причину и/или улучшить работу аналогичные случаи.

+0

Можете ли вы обновить этот ответ решением, если его нашли? Спасибо. – radicalmatt

ответ

0

Попробуйте это на линии 6: (не уверен, если он работает):

<li data-sly-repeat.subpage="${jcomp.componentMap[page]}"> 
<a href="${jcomp.componentMap[page].subpage.path}.html">${jcomp.componentMap[page].subpage.title} </a></li>` 

Примером подобной одной, но с использованием LIST, который работает для меня выглядит следующим образом:

<div data-sly-list.item="${jsonHelper.parsedJSON}" data-sly-unwrap> 
<h3 class="panel-title">${jsonHelper.parsedJSON[item].name @ context='html'}</h3> 
<div class="panel-body" data-sly-list.subitem="${jsonHelper.parsedJSON[item].commodityList}"> 
${jsonHelper.parsedJSON[item].commodityList[subitem].name @ context='html'} 
</div> 
</div> 

Поскольку это усложнялось, мы начали использовать SlingModels. У меня есть пример здесь, если вам интересно: How to display values in a List of a SlingModel using Sightly

 Смежные вопросы

  • Нет связанных вопросов^_^