4

データを更新するために、私はプライムフェイスを使用しますpoll

<p:poll id="myPoll" interval="#{controller.interval}"/>

スピナーで更新間隔を制御したい。

<p:spinner  value="#{controller.interval}">
  <p:ajax process="@this" update="myPoll"/>
</p:spinner>

Beanプロパティの値は期待どおりに更新されますが、ポーリング間隔は更新されません。ポーリングは、間隔値を含む生成されたスクリプトによって実行されます。pollフォーム全体を送信/再レンダリングせずに、更新スクリプトを強制的に再生成して新しい値を含めるにはどうすればよいですか?

4

2 に答える 2

4

あなたがそれに与えるならばwidgetVar、あなたはそれをjavascriptで操作することができます。

widget_form_j_idt19.stop();
widget_form_j_idt19.timer = 1;
widget_form_j_idt19.cfg.frequency = 1;
widget_form_j_idt19.start();

スクリプトに入れるだけで、ajaxの更新後に好きなように更新できるはずです。

于 2012-06-08T20:02:21.940 に答える
3

ここで解決:

Beanに値を設定し、ポーリングをパネルに埋め込むだけで解決される同様の動作に直面していました。このパネルは、たとえばすべてのポーリング後に更新できます。それ以外の場合、ポーリングは単なるjsコードであり、DOMに追加されません。それ以外の場合は、コールバックパラメーターでjsを実行し、クライアント側で値を更新してみてください。

    <p:outputPanel id="infoPanel" >
    <h:panelGrid columns="1">
        <h1>TESTING POLLING</h1>
        <h:outputText id="ts" value="TS Update:#{testPollBean.timeStamp}"/>
        <h:outputText id="callNum" value="Call Number:#{testPollBean.callNumber}°"/>
        <h:outputText id="interval" value="Interval:#{testPollBean.interval} second"/>
        <h:outputText id="Stop" value="Stop:"#{testPollBean.stopPolling}"/>
    </h:panelGrid>  
</p:outputPanel>

<h:panelGrid id="panelPolling">
    <p:poll id="durrPolling" async="true" stop="#{testPollBean.stopPolling}"
        interval="#{testPollBean.interval}" 
        process="@this" partialSubmit="true" listener="#{testPollBean.listener}"
        update="panelPolling infoPanel" widgetVar="polling"
        autoStart="true" rendered="true"/>
</h:panelGrid>

@ViewScoped
@Named(value = "testPollBean")
public class TestPollBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private static final Logger LOG = Logger.getLogger(TestPollBean.class);
    private Calendar calendar;
    private Date timeStamp;
    private Date nextCall;
    private int callNumber;
    private int interval;
    private boolean stopPolling;
    private boolean listenerBusy;

    @PostConstruct
    public void init() {
        this.calendar = Calendar.getInstance();
        this.timeStamp = calendar.getTime();
        this.nextCall = null;
        this.callNumber = 0;
        this.interval = 1;
        stopPolling = false;
        listenerBusy = false;
    }

    public void listener() {
        callNumber ++;
        LOG.info("-> Poll "+ callNumber + "° on thread " + Thread.currentThread().getId());
        if (!listenerBusy) {
            listenerBusy = true; // skip any other concurrence call 

            if (callNumber >= 30) {
                //stopPolling = true;
                this.interval = 30;
            }

            if (callNumber < 20) {
                this.timeStamp = calendar.getTime();
                calendar.add(Calendar.SECOND, interval);
                nextCall = calendar.getTime();

                LOG.info("\t > Attennding "+ callNumber + "° call on  thread " + Thread.currentThread().getId() + ". Sleeping ..." );
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    LOG.info("\t\t E R R O R ! ! ! \t > Attennding "+ callNumber + "° call on  thread " + Thread.currentThread().getId() );
                }
                //Later on we will try to adapt dynamically the interval.
            } else  {
                LOG.info("\t > Attennding inmediately "+ callNumber + "° call on  thread " + Thread.currentThread().getId() + "." );
            }
            LOG.info("<-  Poll "+ callNumber + "° on thread " + Thread.currentThread().getId());

            listenerBusy = false;
        } else {
            LOG.info("<- Listener on thread " + Thread.currentThread().getId() + " dismiss call " + callNumber + "° cause is already busy.");
        }
    }
    + Getters / Setters

私見では; 行われ、機能していることをいじってはいけません。

于 2018-08-14T19:39:26.173 に答える