2010-11-04 24 views
6

Un Id está pasando como un parámetro de Url. Intento asegurarme de que el id es un número. Si no redirige a la página principalFacesContext.getCurrentInstance(). GetExternalContext(). Redirigir no redirige inmediatamente

if(facilityId != null){ 
    try{ 
     Long.parseLong(facilityId); 
    }catch(NumberFormatException e){ 
     try { 
      FacesContext.getCurrentInstance().getExternalContext().redirect("DisplayList.jsf");      
     } catch (IOException ex) {} 
    } 
    facility = documentSBean.findFacilityById(Long.parseLong(facilityId)); 
    ... 
} 

por lo que si me pasa en un id como esto

www....?facilityId=3?sdfasfda 

cojo que 3?sdfasfda no es un número, y llegar a la declaración de redirección, pero no lo hace redirigir a la derecha de una forma, ejecuta las siguientes líneas que intentan convertir 3?sdfasfda a Long, de ahí el NumberFormatException. Entonces, ¿hay alguna manera de forzar la redirección de inmediato, o hay alguna otra forma de resolver este problema? Desearía que haya un else después de un catch: D: D. Los códigos anteriores están dentro de mi método @PostConstruct init()

Respuesta

18

Sí, simplemente return del método:

FacesContext.getCurrentInstance() 
    .getExternalContext().redirect("DisplayList.jsf"); 
return; 

Cuando se invoca redirect(..) lo único que ocurre es que una cabecera especial (Location) se encuentra en el objeto respuesta . Pero el flujo del método de invocación continúa, a menos que return lo haga después de que llame al redireccionamiento.

+0

ai ya. Por qué no pensé en eso. Gracias: D. ¿Sabes por qué hay un retraso en la redirección? –

+0

cuando regrese no habrá demora. – Bozho

Cuestiones relacionadas