Javascript XPages菜单中的动态渲染公式

Javascript XPages菜单中的动态渲染公式,javascript,html,xml,xpages,lotus-domino,Javascript,Html,Xml,Xpages,Lotus Domino,我在XPages中创建了一个计算菜单,其中包含基于用户角色的呈现规则。 “我的菜单”的值是从计算字段中的视图计算出来的。 这是我的菜单代码: <div id='cssmenu'> <ul><li class='active has-sub'> <a href='#'>Title1</a> <ul> <xp:text escape="true" disableTheme="true" contentType="html"

我在XPages中创建了一个计算菜单,其中包含基于用户角色的呈现规则。 “我的菜单”的值是从计算字段中的视图计算出来的。 这是我的菜单代码:

<div id='cssmenu'>
<ul><li class='active has-sub'>
<a href='#'>Title1</a>
<ul>
<xp:text escape="true" disableTheme="true" contentType="html">
<xp:this.value>
<![CDATA[#{javascript:var arr= @DbColumn(@DbName(), "vwMenu", 4);
arr.join("");}]]>
</xp:this.value>
</xp:text>
</ul>
</li>
</ul>
</div>

我的数组中元素的值给出了以下代码示例:

<li class='has-sub'>
<a href=https://mylink.com>Link1</a>
<xp:panel>
<xp:this.rendered>
<![CDATA[${javascript:context.getUser().getRoles().contains('[USER1]')}]]>
</xp:this.rendered>
<ul>
  <li><a href=https://MyPage.com>Link2</a></li>
 </ul>
</xp:panel>
</li>
  • 菜单看起来很好,所以html代码是可以的。但是关于链接2的可视性的xml部分没有。链接2不可见,无论连接用户的角色是什么。我认为这是一个问题,我在javascript代码中使用了xml代码。
    可能是因为我的计算字段的内容类型是html,而用于呈现的代码是xml。

    您忘记了用撇号
    括起
    href
    属性。

      <li class='has-sub'>
                <a href='https://mylink.com'>Link1</a>
                <xp:panel>
                    <xp:this.rendered>
        <![CDATA[${javascript:context.getUser().getRoles().contains('[USER1]')}]]>
                    </xp:this.rendered>
                    <ul>
                        <li>
                            <a href='https://MyPage.com'>Link2</a>
                        </li>
                    </ul>
                </xp:panel>
            </li>
    
  • 方法
    .contains()
    区分大小写。确保ACL中设置的角色完全是
    [USER1]
    。你的渲染代码对我来说很好

    出于测试目的,您可以向呈现的代码添加一些打印:

            <xp:this.rendered>
                <![CDATA[${javascript:
                    print(context.getUser());
                    print(context.getUser().getRoles());
                    context.getUser().getRoles().contains('[USER1]')}]]>
            </xp:this.rendered>
    

    菜单在url中使用撇号或不使用撇号。仅当我根据用户角色设置渲染规则时,它才起作用。感谢您的回答。当我在浏览器中查看菜单代码时,我看到渲染部分已被注释。通常,呈现规则不会出现在源代码中,因为它必须由服务器解释。即使在添加打印时,在检查源代码时也会对其进行注释。我在控制台上没有打印。我用一个有效的XPage更新了我的代码。从那里开始,谢谢你。当我直接在菜单XPage中插入源代码时,渲染就正确完成了。问题是,我使用一个计算字段来构建从视图恢复值的菜单。这些值是“我的菜单”的元素,由用户设置并以某种形式计算(标记、呈现、菜单标题和URL)。当我恢复此计算代码并将其插入到源代码中时,它运行良好。除了我的菜单必须计算。我认为计算字段运行的是html部分,而不是内部的javascript。
    <?xml version="1.0" encoding="UTF-8"?>
    <xp:view
        xmlns:xp="http://www.ibm.com/xsp/core">
        <ul>
            <li>
                <a href="https://mylink.com">Link1</a>
                <xp:panel>
                    <xp:this.rendered>
                        <![CDATA[${javascript:
                            context.getUser().getRoles().contains('[USER1]')}]]>
                    </xp:this.rendered>
                    <ul>
                        <xp:repeat
                            var="link">
                            <xp:this.value><![CDATA[#{javascript:
                                ["https://MyPage.com", "https://www.google.com"]
                            }]]></xp:this.value>
                            <li>
                                <a href="#{link}">
                                    <xp:text escape="true"
                                        value="#{javascript:'Link to ' + link}" />
                                </a>
                            </li>
                        </xp:repeat>
                    </ul>
                </xp:panel>
            </li>
        </ul>
    </xp:view>