2012-04-16 48 views
1

爲什麼這個簡單的導航器代碼不會向onItemClick事件的sessionScope var添加任何內容?從xe:navigator項獲取提交的值

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

回答

3

每個,

href屬性xe:dominoViewLi stTreeNode導致服務器端事件根本不被執行。當單擊一個節點時,它只是對所選頁面(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}" 
+0

啊,課程!客戶端總是優先於服務器端。謝謝,馬克。我會在稍後測試並接受 – 2012-04-16 12:16:02