2013-04-01 2 views
0

Кто-нибудь знает, почему приведенный ниже код выводит 2 каждого навигационного элемента.Повторяющийся цикл Apache Sling

//get the full path to the current page 
String home = Text.getAbsoluteParent(currentPage.getPath(), 2);  
int absParent = currentStyle.get("absParent", 1); 

//checks for invalid and hidden pages. 
PageFilter filter = new PageFilter(request); 

//utility class that provides an iterator over navigation elements 

Navigation nav = new Navigation(currentPage, absParent, filter, 1); 

for (Navigation.Element i: nav) { 
%><li <%= i.hasChildren() %>><a href="<%= i.getPath() %>.html"><%= i.getTitle() %></a>  <% 
      break; 
} 

Но если я добавлю оператор switch в цикл for, он отображает 1 каждого элемента навигации, как должен.

for (Navigation.Element i: nav) { 
    switch (i.getType()) { 
    case ITEM_BEGIN: 
      %><li <%= i.hasChildren() %>><a href="<%= i.getPath() %>.html"><%=  i.getTitle() %></a><% 
      break; 
    } 
} 

Это сводит меня с ума, любая помощь очень ценится! Благодаря!

ответ

3

вы можете попробовать этот код: компонент

<% 
    Navigation navRoot = new Navigation(currentPage,2,new PageFilter(request),4); 
    for (Navigation.Element e: navRoot) { 
     switch (e.getType()) { 
      case NODE_OPEN: 
      %><ul><% 
       break; 
      case ITEM_BEGIN: 
       %><li ><a href="<%= e.getPath() %>.html"><%=  e.getTitle() %></a> <% 
       break; 
      case ITEM_END: 
      %></li><% 
       break; 
      case NODE_CLOSE: 
      %></ul><% 
       break; 
     } 
    } 

    %> 

образца в из коробки экземпляра находится на месте:/приложения/geometrixx/компоненты/topnav

0

Я не знаю точную причину для 2 каждого навигационного элемента. Но CQ5 documentation на «Navigation» заявляет, что

«Навигационный элемент отражает страницу и может иметь различную Navigation.Element.Types. Обратите внимание, что та же страница может быть возвращена в 4 раза для различных типов элементов. Это обеспечивает максимальную гибкость при рисовании навигации «.

Возможно, тот же элемент возвращается 2 раза для типов элементов. Если вы поместите блок блокировки переключателя, вы выбираете конкретный тип элемента и, следовательно, показывается только один раз.

Возможно, ключ к вашему ответу находится в Navigation.Element.Types.

+0

благодаря @anij это только кажется избыточным кодом на добавьте в оператор switch. знаете ли вы, есть ли другой способ захвата страниц верхнего уровня. образец кода действительно поможет мне стать новым новичком для CQ5. –

+0

@Delmon Young Вы пытаетесь создать компонент «Вверх Навигация»? Это ваша проблема. Если да, вы можете посмотреть код для существующих образцов сайтов, которые поставляются вместе с установкой CQ5. Здесь присутствует навигационный компонент. Я попытаюсь опубликовать код позже, но вы можете определенно проверить образцы. В «crxde» вы можете посмотреть в/libs/foundation/components (я думаю, что это путь) или в/apps//components. – AniJ

+0

Благодаря @anij код сверху является модификацией от образцов сайтов, которые поставляются с установкой CQ5. Я пытался лучше понять, почему они функционируют так, как они делают. Если у вас есть пример кода, который будет очень полезен. –

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