当用户已经登录并且用户错误地写了他们的用户名/密码时,我试图在我的应用程序中显示不同的错误。我尝试了很多方法,但没有一个方法有效。我不知道还有什么可以尝试,或者甚至可能。我不知道我是否接近解决方案。 我想做的是:
动作
public class LogUser extends Action {
@Override
public void execute() throws Exception {
...
String pageToGo = this.tryLogUser(username, password);
request.getRequestDispatcher(pageToGo).forward(request, response);
}
private String tryLogUser(String username, String password) throws Exception {
String pageToGo = "page/userHome";
...
if(canLog) {
...
try {
...
Server.getInstance().logIn(user); // Throws an Exception if the User is already logged in.
...
} catch (ServerException e) {
this.setErrorMessage("That user is already logged in.");
pageToGo = "page/error.jsp";
}
} else {
this.setErrorMessage("User and/or Password are incorrect.");
pageToGo = "page/error.jsp";
}
return pageToGo;
}
private void setErrorMessage(String message) {
request.setAttribute("errorMessage", message);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
JSP
<div class="alert alert-danger"> ${ requestScope.errorMessage } </div>
AJAX
function showUserHome() {
$.post( "${ sessionScope.ServletUrl }", $( "form#logForm" ).serialize() )
.done(function( html ) {
$( "div#toolbar" ).load("page/userToolbar.jsp");
$( "div#content" ).html( html );
})
.fail(function( html ) {
$( "#result" ).html( html );
});
}
修改:
尝试从浏览器调试它时,它会进入 $。post ,然后在该步骤之后跳转到函数的末尾,跳过 .done 和 .fail ,页面保持不变。除了我在Action上设置的 SC_INTERNAL_SERVER_ERROR 之外,我在RAD控制台或浏览器控制台中没有收到任何错误。
答案 0 :(得分:0)
调用setErrorPage
方法无法更改pageToGo
局部变量,因此始终使用相同的视图。将其更改为:
pageToGo = setErrorPage("That user is already logged in.");
(或者甚至考虑将其重命名为getErrorPage
)