2010-05-19 24 views
3

這應該是一個非常簡單的問題。我有一個使用JSF呈現的richfaces樹。當用戶點擊一個節點時,我想運行一個javascript函數。沒有什麼比這更少。沒有重定向,沒有重新提交,沒有退縮,沒有Ajax。只是普通的舊Javascript。從Javascript訪問richfaces樹的選定節點

我已經看到被選中的屬性的樹,它的確會觸發一個Javascript方法。但我當然想知道哪個節點被點擊了。

這裏是我迄今爲止

<head> 
<script type="text/javascript"> 
function documentClicked(nodeRef) 
{ 
    alert("Node is "+nodeRef); 
} 

</script> 
</head> 


    <rich:tree switchType="client" value="#{ajaxDocumentTree.rootNode}" 
     var="document" onselected="documentClicked()" > 



     <rich:treeNode iconLeaf="../images/tree/doc.gif" 
      icon="../images/tree/doc.gif"> 

      <h:outputText value="#{document.friendlyName}" /> 

     </rich:treeNode> 

但是,這並不工作,因爲nodeRef是不確定的。我期望回調的第一個參數是選定的節點,但事實並非如此。

所以,問題是這樣的:

如何觸發一個JavaScript函數與來自RichFaces的樹中選擇的節點?

回答

4

答案是javascript代碼應該位於節點級別而不是樹級別。

<head> 
<script type="text/javascript"> 
function documentClicked(nodeRef) 
{ 
    alert("Node id is "+nodeRef); 
} 

</script> 
</head> 


    <rich:tree switchType="client" value="#{ajaxDocumentTree.rootNode}" 
     var="document" > 

     <rich:treeNode onclick="documentClicked('#{document.id}')"> 

      <h:outputText value="#{document.friendlyName}" /> 

     </rich:treeNode> 
0

我幾乎沒有JSF的經驗,但不應該 這個(在你的事件處理程序的範圍內)指的是選定的節點,就像它通常在JavaScript中那樣?

你的職能轉變到這一點,並嘗試一下:

function documentClicked() 
{ 
    alert("Node is " + this); 
} 

編輯:上面顯然不正確。根據我下面的評論,將您的JSF更改爲

<rich:tree switchType="client" value="#{ajaxDocumentTree.rootNode}" 
     var="document" onselected="documentClicked(this)" > 
+0

我以爲同樣的事情!我已經嘗試過了。 「這」指的是整個瀏覽器窗口,而不是選定的節點。 – kazanaki 2010-05-19 07:47:21

+0

你有測試網頁的公開網址嗎?我對這些Java/JSF到JavaScript框架非常懷疑。可能是因爲我不太瞭解它們,但是最終會看到生成的JS代碼有多大幫助。然後我們可以看到實際上如何調用documentClicked。 – 2010-05-19 08:34:49

+0

好吧,我很愚蠢,從你的代碼中明顯看出documentClicked是如何被調用的。保持你原來的功能,並像這樣選中它:documentClicked(this)。 – 2010-05-19 08:45:52