如何在XPage中隐藏带有<li>标签的菜单项</li>

时间:2012-02-09 12:19:40

标签: xpages

我有一个基于这个惯例的传统菜单

<ul>
<li><xp:link>menu link 1</xp:menulink></li>
<li><xp:menulink>menu link 2</xp:menulink></li>
</ul>

我想根据某些逻辑选择性地渲染菜单链接2。 我可以渲染<xp:link>,但由于<li>是HTML标记而不是XPages标记,因此无法控制渲染。

我注意到<xp:text>有一个tagName属性,但<xp:link>没有。 见:http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=4EB7314545EE0C19852578CB0066CE4C

在不使用重复等的情况下管理此方法的最简单方法是什么?

5 个答案:

答案 0 :(得分:7)

您还可以将整个<li>...</li>标记包装在其中包含呈现脚本的<xp:panel>标记中。不要给xp:面板一个ID,也不会向浏览器发送额外的代码。

如果您使用的是Extlib或UP1,那么您也可以使用<xe:listcontainer>标签。它将每个直接子条目呈现为列表项,因此您最终会得到类似于..的代码

<xe:listcontainer>
  <xp:link> ... </xp:link>
  <xp:link rendered="renderscript"> ... </xp:link>
  <xp:link> ... </xp:link>
</xe:listcontainer>

在这种情况下,您无需在代码中添加<ul><li>标记,ExtLib将为您照顾。

答案 1 :(得分:5)

使用面板并将tagName设置为“li”(8.5.3以来的新版本),而不是LI标记:<​​/ p>

<ul>
    <li>
        <xp:link>menu link 1</xp:link>
    </li>
    <xp:panel
        rendered="#{test == true}"
        tagName="li">
        <xp:link>menu link 2</xp:link>
    </xp:panel>
</ul>

答案 2 :(得分:3)

我过去使用过xp:span,但它运行良好。

    <xp:span>
       <xp:this.rendered><![CDATA[#{javascript:document1.isEditable()}]]></xp:this.rendered>
       <li>YOUR TEXT HERE</li>
    </xp:span>

答案 3 :(得分:1)

这有效:

<ul>
    <li>Static item 1</li>
    <xp:text escape="false" id="computedField1" tagName="li" rendered="false">
        <xp:this.value><![CDATA[#{javascript:'<a href="http://XPages.info">menu link 2</a>'}]]></xp:this.value>
    </xp:text>
    <li>Static item 3</li>
</ul>

您当然可以在xp:text上计算渲染标记。

答案 4 :(得分:0)

如果您不担心代码是否显示,您可以随时使用ssjs系统地更改li上的类

<ul>
<li class="#{javascript:return myclassname;}"><xp:link>menu link 1</xp:menulink></li>
<li><xp:menulink>menu link 2</xp:menulink></li>
</ul>