重定向到另一个JSF页面返回404错误

时间:2015-11-08 07:01:53

标签: jsf redirect jsf-2 http-status-code-404

当我的login.xhtml页面打开时,我正在使用jsf 2.0,我输入了用户名和密码,页面将重定向到我的firstpage.xhtml,我的页面无法打开并让我获得404错误。

public void checkLogin() throws NoSuchAlgorithmException, InvalidKeySpecException, IOException {

        if (new LoginBAO().checkLoginFaild(user)) {
            new LoginBAO().updattUserFaild(user);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا در ورود", "بیشتر از  سه دفعه اشتباه اطلاعات خود را وارد کرده اید"));
        } else {
            if (!new LoginBAO().validUsername(user)) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا در ورود", "نام کاربری یا رمز عبور را اشتباه وارد کرده اید"));
            } else {
                if (new LoginBAO().validPassword(user)) {
                    new LoginBAO().updattUserFaild(user);
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا در ورود", "نام کاربری یا رمز عبور را اشتباه وارد کرده اید"));
                } else {
                    new LoginBAO().updateLoginCorrect(user);
                    String uri = "firstpage.jsf";
                    ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
                    context.redirect(uri);

                }
            }
        }

    }

那么我能为这个问题做些什么呢? 我是否从这个问题中更改了我的web.xml代码?

1 个答案:

答案 0 :(得分:1)

我认为最好为此使用动作而不是actionListener,因为动作意味着精确导航​​。所以试试

<p:commandButton value="Login" update="growl" action="#{login.checkLogin()}" />   

然后将方法签名更改为

public String checkLogin()

此外,我不认为这个方法需要抛出所有这些异常,如果LoginBAO方法抛出那些更好的捕获它们。

最后返回null或要显示的新xhtml页面的名称,例如

if (new LoginBAO().checkLoginFaild(user)) {
        new LoginBAO().updattUserFaild(user);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا در ورود", "بیشتر از  سه دفعه اشتباه اطلاعات خود را وارد کرده اید"));
        return null;
}

,重定向就是

return "/firstpage.xhtml?faces-redirect=true";

需要?faces-redirect = true,因为commandButton提交了一个ajax调用,无法进行正常导航。

确保Faces Servlet映射到web.xml中的* .xhtml。