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

回避策として、次のhrefを使用する代わりに、viewEntry.getName()をパラメーターとして転送しています。

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

1 に答える 1

3

あたり、

xe:dominoViewListTreeNodehref属性により、サーバー側のイベントはまったく実行されません。ノードをクリックすると、選択したページ(page.xsp)へのHTTPGETが実行されます。それを削除し、サーバーサイドコードでユーザーをリダイレクトすると、サンプルは機能するはずです。

<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 に答える