【问题标题】:Apache Sling loop repeatingApache Sling 循环重复
【发布时间】:2013-04-01 00:52:13
【问题描述】:

有谁知道为什么下面的代码会输出每个导航元素中的 2 个。

//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;
 }

但是,如果我在 for 循环中添加一个 switch 语句,它会显示每个导航元素中的 1 个。

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

这让我发疯了,非常感谢任何帮助!谢谢!

【问题讨论】:

    标签: java sling


    【解决方案1】:

    你可以试试这个代码 sn-p :

        <%
        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;
            }
        }
    
        %>
    

    开箱即用实例中的示例组件位于:/apps/geometrixx/components/topnav

    【讨论】:

      【解决方案2】:

      我不知道每个导航元素中有 2 个的确切原因。但是“Navigation”上的 CQ5 documentation 声明

      “一个导航元素反映了一个页面,并且可以有不同的Navigation.Element.Types。请注意,对于不同的元素类型,可能会返回 4 次相同的页面。这在绘制导航时提供了最大的灵活性。”

      对于元素类型,可能会返回 2 次相同的元素。如果您放置 switch-case 块,则您正在选择特定的元素类型,因此只显示一次。

      也许你答案的关键在于Navigation.Element.Types

      【讨论】:

      • 感谢@anij,在 switch 语句中添加似乎是多余的代码。你知道是否有另一种方法来捕获顶级页面。一个代码示例真的可以帮助我成为 CQ5 的新手。
      • @Delmon Young 您是否正在尝试构建“顶部导航”组件?那是你的问题陈述。如果是,您可以查看随 CQ5 安装一起提供的现有示例站点的代码。导航组件在那里。我稍后会尝试发布代码,但您绝对可以查看示例。在“crxde”中,您可以查看 /libs/foundation/components (我认为这是路径)或 /apps//components 下。
      • 感谢@anij 上面的代码是对 CQ5 安装附带的示例站点的修改。我试图更好地理解它们为什么会这样运作。如果您有一个非常有用的代码示例。
      猜你喜欢
      • 2016-11-06
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2016-12-16
      • 2018-03-20
      相关资源
      最近更新 更多