JSF ページにカウントダウンが必要で<p:poll>
、Primefaces で解決しました。
私は次のソースを持っています:
JSFページ:
<h:form>
<h:outputText id="timeLeft" value="#{bean.secondsToGo}" />
<p:poll interval="1" listener="#{bean.countdown}" stop="#{bean.secondsToGo<0}" update="timeLeft" />
</h:form>
BEAN (ビュースコープ):
private int secondsToGo;
public void setValues(){ //prerenderview-event )
if(FacesContext.getCurrentInstance().isPostback()){
System.out.println("POSTBACK RECOGNIZED");
return; //ignore ajax-calls!
}
...
secondsToGo=74; //(the value depends from a GET-parameter
System.out.println("INIT: " + secondsToGo);
}
public void countdown(){
System.out.println("BEFORE: " + secondsToGo);
secondsToGo--;
System.out.println("AFTER: " + secondsToGo);
}
おもしろい、または奇妙なことは、ajax 呼び出しが実行されると (p:poll)、secondsToGo が 0 にリセットされることです。
INIT: 74 //正しい値
前: 0
後: -1
なんで?