primefaces轮询动态间隔

问题描述 投票:2回答:1

我写了这样的示例代码:

@ViewScoped
@Named
public class SampleBean implements Serializable {

    private int interval = 1;


    public void execute() {
        switch (interval) {
            case 1:
                System.out.println("1 Executed ...");
                break;
            case 2:
                System.out.println("2 Executed ...");
                break;
            case 3:
                System.out.println("3 Executed ...");
                break;
        }
    }

    public int getInterval() {
        return interval;
    }

    public void setInterval(int interval) {
        this.interval = interval;
    }
}    

这个xhtml:

<h:form>
        <p:selectOneButton value="#{sampleBean.interval}">
            <f:selectItem itemLabel="1" itemValue="1"/>
            <f:selectItem itemLabel="2" itemValue="2"/>
            <f:selectItem itemLabel="3" itemValue="3"/>
        </p:selectOneButton>

        <p:poll interval="#{sampleBean.interval}" listener="#{sampleBean.execute}" id="poll"/>

    </h:form>    

我想动态更新primefaces poll组件的间隔时间,但不用我的示例代码更改。睡眠总是每1秒执行一次。 我的代码有什么问题?

jsf primefaces jsf-2.2
1个回答
3
投票

你需要告诉p:poll组件重新获取它的支持bean值。您可以通过在组件上调用新的渲染阶段(通过PrimeFaces update或通过f:ajax render)轻松完成此操作。

所以为了使它工作,你只需要做这样的事情,

<h:form>
    <p:selectOneButton value="#{sampleBean.interval}">
        <f:selectItem itemLabel="1" itemValue="1"/>
        <f:selectItem itemLabel="2" itemValue="2"/>
        <f:selectItem itemLabel="3" itemValue="3"/>
        <f:ajax render="@form"/>
    </p:selectOneButton>
    <p:poll interval="#{sampleBean.interval}" listener="#{sampleBean.execute}" id="poll"/>
</h:form>    

注意上面的f:ajax调用。

您需要定位封闭(父)组件以使其刷新 - 这就是我们直接定位表单而不是poll组件的原因。

© www.soinside.com 2019 - 2024. All rights reserved.