2010-11-04 43 views
6

An Id được chuyển thành tham số Url. Tôi cố gắng đảm bảo rằng số id là một số. Nếu không được chuyển hướng đến trang chínhFacesContext.getCurrentInstance(). GetExternalContext() .chuyển hướng không chuyển hướng ngay lập tức

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

vì vậy nếu tôi vượt qua trong một id như thế này

www....?facilityId=3?sdfasfda 

Tôi bắt mà 3?sdfasfda không phải là một con số, và nhận được để báo cáo kết quả chuyển hướng, nhưng nó không chuyển hướng đúng một cách, nó thực hiện các dòng tiếp theo mà cố gắng chuyển đổi 3?sdfasfda thành Long, do đó có năng suất NumberFormatException. Vì vậy, có một cách để buộc chuyển hướng ngay lập tức, hoặc là có một số cách khác để giải quyết vấn đề này. Muốn có một số else sau catch: D: D. Các mã trên là bên trong phương pháp @PostConstruct init() tôi

Trả lời

18

Vâng, chỉ đơn giản là return từ phương pháp này:

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

Khi bạn gọi redirect(..) điều duy nhất xảy ra là một tiêu đề đặc biệt (Location) được thiết lập trong đối tượng phản ứng . Nhưng luồng của phương thức gọi vẫn tiếp tục, trừ khi bạn return từ nó sau khi bạn gọi chuyển hướng.

+0

ai ya. Tại sao tôi không nghĩ về điều đó. Cảm ơn bạn: D. Bạn có biết tại sao có sự chậm trễ trên chuyển hướng không? –

+0

khi bạn quay trở lại sẽ không có sự chậm trễ. – Bozho