我有一个基于这个惯例的传统菜单
<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
在不使用重复等的情况下管理此方法的最简单方法是什么?
答案 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>