使用Ajax在JSP中显示特定错误

时间:2014-12-05 14:27:50

标签: java jquery ajax jsp

当用户已经登录并且用户错误地写了他们的用户名/密码时,我试图在我的应用程序中显示不同的错误。我尝试了很多方法,但没有一个方法有效。我不知道还有什么可以尝试,或者甚至可能。我不知道我是否接近解决方案。 我想做的是:

  • 在请求中设置errorMessage;
  • 在响应中设置 SC_INTERNAL_SERVER_ERROR ,以便AJAX函数输入**,参数中的HTML是具有特定消息的JSP中的HTML。

动作

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控制台或浏览器控制台中没有收到任何错误。

1 个答案:

答案 0 :(得分:0)

调用setErrorPage方法无法更改pageToGo局部变量,因此始终使用相同的视图。将其更改为:

pageToGo = setErrorPage("That user is already logged in.");

(或者甚至考虑将其重命名为getErrorPage