3

私のアプリケーションは、jsp ページと jquery.mobile で構築されています。Java関数を使用してログインステータスを確認し、次のようにBean内からOKでない場合はリダイレクトを行います。

public String getMenu(HttpSession session, HttpServletResponse response, MenuType menuType, CurrentPage currentPage)
{
    if (session.getAttribute("state") == LoginChecked.UNDEFINED))
    {
        response.sendRedirect("../index.jsp");

        return null;
    }
    else
    {
        ...

問題は、index.jsp へのリダイレクトが、完全なリダイレクトではなく、ページのコンテンツの ajax リロードとして jquery.mobile によって処理されることです。

index.jsp ページのブラウザを強制的に完全にリロードするにはどうすればよいですか?

- 追加した -

HTML内では、これは次のような「rel」属性で解決されるため、Java sendRedirect内からこのrelを使用するには何らかの方法が必要になります。

<a href='../index.jsp' data-role='button' data-icon='plus' rel='external'>
4

4 に答える 4

1

私は最近、同様の問題を自分で解決することを検討していました(実際には、AJAXリクエストがリダイレクトされるときにリダイレクトします)。ここで、ブックマークしなかったように見える非常に良い答えを見つけました。しかし、自分でうまく実装できたので、その答えに基づいて私が取ったアプローチを共有します。

最初の段階は、AJAXリクエストを識別して、標準のリクエストとは異なる方法で処理できるようにすることでした。X-Requested-Withこれは、リクエストヘッダーの値を確認することで実行できます。の値はXMLHttpRequestAJAXリクエストを示します。標準リクエストの場合、通常どおりリダイレクトを続行します。AJAXリクエストを処理する場合、リダイレクトを続行するのではなく、リダイレクトが発生したことを示す応答ヘッダーを設定し、その値をリダイレクト先のURLに設定します。

次に、次のjQueryコードを使用して、完了したすべてのAJAXリクエストを確認し、必要に応じてリダイレクトします。

$(document).bind('ajaxComplete', function(event, xhr, options) {
    var redirectHeader = xhr.getResponseHeader('YourHeader');
    if(xhr.readyState == 4 && redirectHeader != null) {
        window.location.href = redirectHeader;
    }
});
于 2012-07-30T13:52:23.960 に答える
1

ajax内では、次のようにする必要があります:

success: function(data, textStatus) {
        if (data.redirect) {
            // data.redirect contains the string URL to redirect to
            window.location.href = data.redirect;
        }
}

これにより、サーバーによって指定されたWebページにリダイレクトされますdata

于 2012-07-30T13:35:35.830 に答える
0

技術的には、Ajax 呼び出しはリダイレクトをサポートしていません (呼び出しは常に呼び出し側で終了します)。クライアント側で応答コードを識別し、window.location(href) のようにクライアント側のリダイレクトを行う必要がある場合があります。

于 2012-07-30T13:29:50.360 に答える
-1

私もそのような問題を抱えており、効果的な解決策を見つけました。

これはAJAXと関係があり、私の解決策は次のとおりです。data-ajax="false"あなたの属性として追加します<form>。私がしたように:

<form id="reg-input" action="/Myservlet" method="post" data-ajax="false">
    <!-- .. -->
</form>

これにより、ajax が使用できなくなります。注意してください。

于 2013-06-06T18:01:49.383 に答える