重定向到另一个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";