2011-01-20 59 views
7

我想在應用中使用帶有JSF元素的rich:effect,但在AJAX方面遇到了一些問題。rich:效果使用問題

根據以下內容,我有一個h:outputText元素,它具有JSF參考值(#{MyBacking.sysMsg}),該值在應用程序的用戶體驗期間發生變化。由於rich:effect元素使用javascript事件,因此指定下面的代碼不起作用。

我已經嘗試過使用a4j:支持ajaxify h:outputText元素,但這似乎也被忽略了。沒有按鈕會被用戶點擊 - sysMsg變量在其他地方更新,我想突出顯示觀衆的變化。

的代碼如下:

<h:outputText value="#{MyBacking.sysMsg}" id="sysMsg" style="#{MyBacking.colour}" /> 
<rich:effect event="onchange" type="Highlight" params="duration:0.8" /> 
<rich:effect event="onchange" for="sysMsg" type="Appear" params="delay:3.0,duration:0.5" /> 

我想肯定有很多是這種簡單的答案,但我似乎無法找到我的頭上或在網上的答案。誰能幫我?

回答

1

要根據服務器端更改更新文本,您必須使用<a4j:poll><a4j:push>

例如爲:

<rich:effect name="highlight" for="sysMsg" type="Highlight" params="duration:0.8" /> 

<h:form> 
<a4j:poll id="poll" interval="1000" reRender="sysMsg" oncomplete="highlight();"/> 
</h:form> 

當然會突出每秒,而不是隻有當值改變了這種情況。要僅突出顯示更改,最好使用自定義JavaScript/jquery函數,記住更改時的值和調用突出顯示。

這裏是一個可能的解決方案:

<h:form id="form"> 
<a4j:region renderRegionOnly="true"> 
    <h:outputText value="#{MyBacking.sysMsg}" id="sysMsg" style="#{MyBacking.colour}" /> 
    <a4j:poll id="poll" interval="1000" reRender="sysMsg" oncomplete="checkChange();" limitToList="true"/> 
</a4j:region> 

<rich:effect name="highlight" for="sysMsg" type="Highlight" params="duration:0.8" /> 

</h:form> 

<script> 
var value = $('form:sysMsg').textContent ; 
function checkChange(){ 
    if($('form:sysMsg').textContent != value){ 
     highlight(); 
    } 
} 
</script> 

這裏有樣本:Exadel Demo和文檔:rich:effecta4j:poll

+0

感謝您的幫助 - 我都試過ajaxed面板和DIV無濟於事。 – volvox 2011-01-21 16:15:11