Problema con FacesContext
Hola tengo el siguente metodo dentro de mi aplicacion donde constantemente esto ejecutandolo cada 3 segundos y nunca me reconoce la interfaz visual de mi aplicacion y si esta visible...Saludos y gracias...si no queda claro postear yo le respondo gracias
public void temporizador() {
System.out.println("Entro a TEMPORIZADOR");
ses = Executors.newScheduledThreadPool(1);
// Ejecutar dentro de 4 segundos, repetir cada 3 segundos
ses.scheduleAtFixedRate(this, 4 * 1000, 3 * 1000, TimeUnit.MILLISECONDS);
}
public void run() {
System.out.println("Entro a RUN");
FacesContext fc = FacesContext.getCurrentInstance();
if(fc != null){
UIComponent comp0 = fc.getViewRoot().findComponent("form_dashboard:id_office0");
UIComponent comp1 = fc.getViewRoot().findComponent("form_dashboard:id_office1");
UIComponent comp2 = fc.getViewRoot().findComponent("form_dashboard:id_office2");
UIComponent comp3 = fc.getViewRoot().findComponent("form_dashboard:id_office3");
UIComponent comp4 = fc.getViewRoot().findComponent("form_dashboard:id_office4");
UIComponent comp5 = fc.getViewRoot().findComponent("form_dashboard:id_office5");
UIComponent comp6 = fc.getViewRoot().findComponent("form_dashboard:id_office6");
UIComponent comp7 = fc.getViewRoot().findComponent("form_dashboard:id_office7");
UIComponent comp8 = fc.getViewRoot().findComponent("form_dashboard:id_office8");
}
if (office0 != null) {
if (generalServices.dameTiempoAtención(office0) != atencion0) {
atencion0 = generalServices.dameTiempoAtención(office0);
System.out.println("ACTUALIZO ATENCION OFFICE 0");
}
if (generalServices.dameTiempoEspera(office0) != espera0) {
espera0 = generalServices.dameTiempoEspera(office0);
System.out.println("ACTUALIZO ESPERA OFFICE 0");
}
Float provisional0 = Redondear2Decimales(generalServices.damePorcentClientDESERT(office0));
if (provisional0 != abandonan0) {
abandonan0 = provisional0;
System.out.println("ACTUALIZO % OFFICE 0");
}
}
}
}
- Inicie sesión o regístrese para enviar comentarios
FacesContext.getCurrentInstance()
Hola Yudiel,
Al inspeccionar tu código me doy cuenta de esta línea:
La cual esta siendo llamada desde el método run del
Runnable
que estas pasando como parametro alScheduledExecutorService
. Si mal no recuerdo (lo que pasa es que usaba JSF hace mucho) este metodo estatico te regresa elFacesContext
para el request.Desgraciadamente (en las implementaciones que he usado) este método está implementado con un
ThreadLocal
. Lo que significa que únicamente te va a regresar lo que le pides si la llamada se ejecuta en el mismoThread
que despacho tu request i.e. si lo llamas desde elThread
que despacha tu métodorun
te regresaranull
por que es un Thread diferente.Quiero suponer que debido a lo anterior tu estas haciendo el check
if(fc != null)
. No tengo el contexto de lo que quieres hacer pero pues supongo que deseas actualizar esos componentes en un hilo aparte; en ese caso pues simplemente podrias guardar elFacesContext
como un campo de tu clase... Sin embargo no se si esto te de problemas despues si es que tienes mas de un request y este objeto deje de servirte o sea reemplazado por el contexto de otro hilo (en otro request).