我想在我的应用程序中使用带有JSF元素的rich:effect,但在AJAX方面遇到了一些麻烦。

根据以下内容,我有一个h:outputText元素,该元素具有一个JSF引用值(#{MyBacking.sysMsg}),该值在用户使用该应用程序时会发生变化。由于rich:effect元素使用javascript事件,因此无法指定以下代码。

我已经尝试过使用a4j:support来使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" />

我认为肯定会有一个简单的答案,但是我似乎无法在脑海中或网上找到答案。谁能帮我?

最佳答案

要基于服务器端的更改来更新文本,您将必须使用<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:effect a4j:poll

关于java - 丰富的:effect usage problem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4747938/

10-11 13:41