How do I hide a menu item with an <li> tag in XPages

て烟熏妆下的殇ゞ 提交于 2019-12-11 02:20:25

问题


I have a traditional menu that us based on this convention

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

I want to selectively render the menu link 2 based on some logic. I can render the <xp:link> fine but as the <li> is a HTML tag rather than an XPages Tag the rendering cannot be controlled.

I noticed that there is a tagName property for <xp:text> but not for <xp:link>. see : http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=4EB7314545EE0C19852578CB0066CE4C

What is the easiest way to manage this without using repeats etc ?


回答1:


I have used xp:span in the past and it has worked fine.

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



回答2:


You can also wrap the entire <li>...</li> tag in an <xp:panel> tag that has a rendered script on it. Don't give the xp:panel an ID and no extra code is sent to the browser.

If you are using the Extlib or UP1 then you can also use the <xe:listcontainer> tag. It renders each direct child entry as a list item so you would end up with code similar to..

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

In this case there is no need for you to add the <ul> or <li> tags in the code, the ExtLib will look after that for you.




回答3:


Instead of the LI tag, use a panel and set the tagName to "li" (new since 8.5.3):

<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>



回答4:


This works:

<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>

You can of course compute the rendered tag on xp:text.




回答5:


If your not worried about whether or not the code shows you can always just change the class on the li systematically using ssjs

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


来源:https://stackoverflow.com/questions/9210709/how-do-i-hide-a-menu-item-with-an-li-tag-in-xpages

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!