2012-05-22 58 views
1

是否可以在jQuery中觸發jsf <f:ajax render>如何從jQuery觸發JSF渲染

例如是這樣的:

/* if component Y changes 
    trigger render event on component Y */ 

$("#source_compoment").bind("change", function(e) { 
    $("#target_component").trigger("render"); 
}); 

或者與其他詞是有 「F:AJAX渲染」 同等範圍內的jQuery?

回答

3

是,做一個隱藏按鈕

<h:commandButton id="myHiddenButtonID" value="RenderSomething" style="display:none"> 
    <f:ajax render="target_component"></f:ajax> 
</h:commandButton> 

,並在特定情況下,單擊它從JS

$("#myHiddenButtonID").click(); 

它看起來就像這樣:

$("#source_compoment").bind("change", function(e) { 
    $("#myHiddenButtonID").click(); 
}); 

順便說一句,沒有「相當於」f:ajax render「在jQuery中」你簡單的使用jQuery來點擊一個隱藏的JSF按鈕。


編輯

如果第三方JSF庫的使用是相關的,你可以使用

Primefaces RemoteCommand - (use update attribute)

Richfaces/ a4j:jsFunction - (use reRender attribute)

+0

這是一個儘管我的問題確實存在,但並未解決背後的問題,因爲我想避免在每個組件中定義'長列表ui_comps「>,而是在jQuery中的一個位置執行。 – lzdt

+0

你確定你不能用say,panelGroup包裝這些ID並只渲染它嗎?無論如何,如果你決定使用JSF api(不推薦INMO)來做f:ajax,你將不得不輸入ui_comps的長列表。 – Daniel

+0

另外我認爲這是一個不同的問題(「如何避免」'」的長列表),導致用say,panelGroup和render來包裝這些ID只是一種方法... – Daniel