有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java丰富:效果使用问题

我想在我的应用程序中使用带有JSF元素的rich:effect,但在AJAX方面有点问题

如下所示,我有一个h:outputText元素,它有一个JSF引用值(#{MyBacking.sysMsg}),在用户体验应用程序时会发生变化。由于rich:effect元素使用javascript事件,指定下面的代码不起作用

我曾尝试使用a4j:support对h:outputText元素进行ajaxify化,但这似乎也被忽略了。用户不会点击任何按钮——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) 个答案

  1. # 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函数,记住值并在更改时调用highlight

    以下是一个可能的解决方案:

    <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