FacesContext.getCurrentInstance()。getExternalContext()。redirect不会立即重定向

时间:2010-11-04 22:43:53

标签: jsf redirect

Id作为Url参数传入。我尝试确保id是一个数字。如果没有重定向到主页

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

所以,如果我传入像这样的身份

www....?facilityId=3?sdfasfda

我发现3?sdfasfda不是一个数字,并且转到redirect语句,但是它没有正确地重定向,它会执行下一行尝试将3?sdfasfda转换为long的行因此产量NumberFormatException。那么有没有办法立即强制重定向,或者是否有其他方法来解决这个问题。希望else之后有catch:D:D。以上代码位于我的@PostConstruct init()方法

1 个答案:

答案 0 :(得分:19)

是的,只需从方法中return

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

当您调用redirect(..)时,唯一发生的事情是在响应对象中设置了一个特殊的标头(Location)。但是,调用方法的流程将继续,除非您在调用重定向后从return开始。