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

重定向到另一个JSF页面返回404错误,jsf,redirect,jsf-2,http-status-code-404,Jsf,Redirect,Jsf 2,Http Status Code 404,当我的登录.xhtml页面打开时,我正在为我的项目使用jsf 2.0。我输入了我的用户名和密码,该页面将重定向到我的第一页。xhtml和我的页面未打开,并出现404错误 public void checkLogin() throws NoSuchAlgorithmException, InvalidKeySpecException, IOException { if (new LoginBAO().checkLoginFaild(user)) { new

当我的
登录.xhtml
页面打开时,我正在为我的项目使用jsf 2.0。我输入了我的用户名和密码,该页面将重定向到我的
第一页。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代码以解决此问题?

我认为最好使用操作而不是actionListener来解决此问题,因为操作完全是为了导航。所以试试看

<p:commandButton value="Login" update="growl" action="#{login.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调用,无法进行正常的导航


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

您是否查看了浏览器地址栏中的URL?它是一个有效的URL吗?404显然表明它没有指向现有资源。如果你能准确地说出它应该是哪个URL,那么我们就可以知道如何编写
uri
。非常感谢,你解决了我的问题,我用波斯语说谢谢:如果你想翻译这门语言,就用波斯语Jaqen H'ghar
return "/firstpage.xhtml?faces-redirect=true";