2010-11-04 5 views
6

Un Id est transmis en tant que paramètre Url. J'essaie de m'assurer que le id est un nombre. Sinon redirection vers la page principaleFacesContext.getCurrentInstance(). GetExternalContext(). Redirection ne redirige pas immédiatement

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)); 
    ... 
} 

donc si je passe un id comme celui-ci

www....?facilityId=3?sdfasfda 

Je surprends que 3?sdfasfda est pas un nombre, et obtenir la déclaration de redirection, mais il ne fonctionne pas rediriger à droite d'une manière, il exécute les lignes de deux prochaines qui essaient de convertir 3?sdfasfda à un long, donc rendement NumberFormatException. Il existe donc un moyen de forcer la redirection immédiatement ou existe-t-il un autre moyen de résoudre ce problème? Souhaite qu'il y ait un else après un catch: D: D. Les codes ci-dessus sont à l'intérieur de mon @PostConstruct init() méthode

Répondre

18

Oui, simplement return de la méthode:

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

Lorsque vous invoquez redirect(..) la seule chose qui arrive est qu'un en-tête spécial (Location) est définie dans l'objet de réponse . Mais le flux de la méthode d'invocation continue, sauf si vous l'appelez après avoir appelé la redirection.

+0

ai ya. Pourquoi n'ai-je pas pensé à ça. Merci: D. Savez-vous pourquoi il y a un retard sur la redirection? –

+0

quand vous revenez il n'y aura pas de retard. – Bozho

Questions connexes