Я хочу обратный отсчет на моей странице JSF, и я решил его с помощью <p:poll>
от Primefaces.JSF PrimeFaces Ajax variable reset
Я следующий источник:
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>
БИН (вид области действия):
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: опрос), секундаToGo сбрасывается на 0:
INIT: 74 // правильное значение
ДО: 0
ПОСЛЕ: -1
Почему?
Спасибо за ваш ответ, я забыл упомянуть, что я использую GET-параметр, и я отфильтровывать Ajax-запросы, когда PreRender вызывается: (. FacesContext.getCurrentInstance() IsPostBack()) если { System.out. println ("POSTBACK RECOGNIZED"); возвращение; // ignoreajax! } поэтому мне нужно установить переменные на prerenderview. Я понял, что если бы я поместил все используемые переменные в, это решило бы проблему, но это не может быть правильным. Может быть, есть еще один способ подсчета серверной переменной вниз (помимо опроса)? Все, что я хочу, это изменить только одну переменную, не все из bean ... –
Niko
вам нужно запустить счетчик несколько раз в одной странице? почему вы думаете, что нужно изменить несколько переменных? – Dodek
Привет, Не хватает того, что в PostConstruct у меня нет доступа к моим параметрам viewparam (GET-Parameters). поэтому мне нужно установить значение init на первом prerenderview (его только один раз выполнил один раз) – Niko