2010-11-04 9 views
6

Jako parametr Url podaje się Id. Próbuję się upewnić, że numer id jest liczbą. Jeśli nie przekierowuje do strony głównejFacesContext.getCurrentInstance(). GetExternalContext(). Przekierowanie nie przekierowuje natychmiast

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

więc jeśli przechodzą w identyfikatorze jak ten

www....?facilityId=3?sdfasfda 

złapię że 3?sdfasfda nie jest liczbą, a dostać się do rachunku przekierowania, ale to nie robi przekierować w prawo, wykonać kilka następnych linii, które próbują przekonwertować 3?sdfasfda na długi, stąd wydajność NumberFormatException. Czy istnieje sposób na wymuszenie przekierowania od razu, czy istnieje jakiś inny sposób rozwiązania tego problemu. Życzę sobie, aby po : D: D był else. Powyższe kody są w moim sposobie @PostConstruct init()

Odpowiedz

18

Tak, po prostu return z metody:

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

Po wywołaniu redirect(..) jedyną rzeczą, która się dzieje, że specjalny nagłówek (Location) jest ustawiony w obiekcie odpowiedzi . Jednak przepływ wywoływanej metody jest kontynuowany, chyba że po wywołaniu przekierowania otrzymasz od niej return.

+0

ai ya. Dlaczego o tym nie pomyślałem. Dziękuję: D. Czy wiesz, dlaczego nastąpiło opóźnienie w przekierowaniu? –

+0

po powrocie nie będzie opóźnienia. – Bozho

Powiązane problemy