Xpages:无法触发 Navigator 中的 OnClick 事件

Xpages: Cannot get OnClick event in Navigator to fire

我正在尝试为文档数据库构建一个动态导航器。导航器通过使用重复节点正确构建(我从 Per 的 post 中得到它)我可以将页面或基本节点放在重复节点中,一切看起来都不错,但我需要设置一个范围变量,然后刷新视图元素,我无法触发该代码。

我在下面包含了导航器的代码。任何帮助将不胜感激,我搜索了 Stack Overflow 并尝试手动添加事件都无济于事。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
        <xe:navigator
            id="navigator1"
            expandable="false">
            <xe:this.treeNodes>
                <xe:repeatTreeNode
                    var="navEntry"
                    indexVar="index"
                    loaded="true">
                    <xe:this.children>
                        <xe:pageTreeNode
                            rendered="true"
                            page="/xpViewAllDocs.xsp">
                            <xe:this.label><![CDATA[#{javascript:var dbName=@DbName();
var arr = @Unique(@Trim(@DbColumn(dbName,"alldocslookup",1)))
arr[index]}]]></xe:this.label>
                        </xe:pageTreeNode>
                    </xe:this.children>
                    <xe:this.value><![CDATA[#{javascript:var dbName=@DbName();
@Elements(@Unique(@Trim(@DbColumn(dbName,"alldocslookup",1))))}]]></xe:this.value>
                </xe:repeatTreeNode>    
            </xe:this.treeNodes>
            <xp:eventHandler
                event="onItemClick"
                submit="true"
                refreshMode="complete">
                <xe:this.action><![CDATA[#{javascript:viewScope.put("key","Test");
view.postScript("alert('Client Side JavaScript executed!')");}]]></xe:this.action>
            </xp:eventHandler></xe:navigator>
        </xp:view>

编辑:

我尝试了以下所有建议,但其中 none 行得通。

我可以通过简单地将 link 放在重复或计算字段或类似的东西中来实现它,但它看起来根本不像导航元素。如果我可以更改 css 一些使其看起来像导航,我会很高兴。我已经用列表容器尝试了一下,但它不起作用:

我觉得我有点亲近。我该怎么做才能让它看起来更像导航器?

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xe:list
        id="list1"
        styleClass="lotusMenuHeader">
        <xp:link
            role="menuItem"
            styleClass="lotusSelected"> All Documents</xp:link>
        <xp:link>Tag 1</xp:link>
        <xp:link>Tag 2</xp:link>
    </xe:list>
    <xp:panel>
        <ul
            header="lotusMenuHeader">
            <li
                class='lotusSelected'>Coffee</li>
            <li>Tea</li>
            <li>Milk</li>
        </ul>
    </xp:panel>
</xp:view>

onItemClick 似乎不适用于 pageTreeNode。事件根本不会呈现。

改用basicLeafNodeonItemClick 确实很好用。
将当前点击的值放入 sessionScope 变量 context.getSubmittedValue().
使用 context.getSubmittedValue().

重定向到您的目标 XPage
<xe:navigator
    id="navigator1"
    expandable="false">
    <xe:this.treeNodes>
        <xe:repeatTreeNode
            var="navEntry">
            <xe:this.children>
                <xe:basicLeafNode
                    label="#{navEntry}"
                    submitValue="#{navEntry}" />
            </xe:this.children>
            <xe:this.value><![CDATA[#{javascript:var dbName=@DbName();
                @Unique(@Trim(@DbColumn(dbName,"alldocslookup",1)))}]]></xe:this.value>
        </xe:repeatTreeNode>
    </xe:this.treeNodes>
    <xp:eventHandler
            event="onItemClick"
            submit="true"
            refreshMode="complete">
            <xe:this.action><![CDATA[#{javascript:
                sessionScope.key = context.getSubmittedValue();
                context.redirectToPage("xpViewAllDocs.xsp")}]]></xe:this.action>
        </xp:eventHandler>
</xe:navigator>