1

为什么这个简单的导航器代码没有向 onItemClick 事件中的 sessionScope 变量添加任何内容?

<xe:navigator id="navigator1">         
    <xe:this.treeNodes>
        <xe:dominoViewListTreeNode filter="All.*" submitValue="#{javascript:return viewEntry.getName()}" var="viewEntry" href="page.xsp">
            <xe:this.databaseName><![CDATA[#{javascript:database.getServer() + "!!" + "path//db.nsf"}]]></xe:this.databaseName>
        </xe:dominoViewListTreeNode>
    </xe:this.treeNodes>
                   
    <xp:eventHandler event="onItemClick" submit="true" refreshMode="complete">
        <xp:this.action><![CDATA[#{javascript:sessionScope.clickedView = context.getSubmittedValue()}]]></xp:this.action>
    </xp:eventHandler>
</xe:navigator>

该代码深受 XPages101 第 71 课的启发:http: //xpages101.net/xpages101/XPages101.nsf/0/4DB7580AC6931682802579A7004E74E7

作为一种解决方法,我将 viewEntry.getName() 作为参数传输,而不是使用以下 href:

<xe:this.href><![CDATA[#{javascript:"page.xsp?view="+viewEntry.getName();}]]></xe:this.href>
4

1 回答 1

3

每,

xe:dominoViewListTreeNode中的href属性导致服务器端事件根本不被执行。当单击一个节点时,它只是对所选页面(page.xsp)执行一个 HTTP GET。如果您删除它并在服务器端代码中重定向用户,您的示例应该可以工作:

<xe:navigator id="navigator1">         
  <xe:this.treeNodes>
     <xe:dominoViewListTreeNode filter="All.*" submitValue="#{javascript:return viewEntry.getName()}" var="viewEntry">
        <xe:this.databaseName><![CDATA[#{javascript:database.getServer() + "!!" + "path//db.nsf"}]]></xe:this.databaseName>
    </xe:dominoViewListTreeNode>
  </xe:this.treeNodes>

  <xp:eventHandler event="onItemClick" submit="true" refreshMode="complete">
     <xp:this.action>
       <![CDATA[#{javascript:sessionScope.clickedView = context.getSubmittedValue();
     context.redirectToPage("page");}]]>
     </xp:this.action>
  </xp:eventHandler>
</xe:navigator>

另一个提示:使用表达式语言,您可以将 submitValue 属性的公式缩短为:

submitValue="#{viewEntry.name}"
于 2012-04-16T12:06:14.877 回答