2011-02-01 5 views
1

という名前のサーブレットがあります。私が開発しているウェブデザインの特定のアイテムに関連付けられている写真を編集するためのEditPhotosと思われます。写真を編集するためのURLパスはです[[SITEROOT]] /編集写真/ [[ITEMNAME]]です。サーブレットへのリダイレクトは失敗します

このパス(GET)に移動すると、ページが正常に読み込まれます。同じページにPOSTする「削除」リンクをクリックして、写真を削除するよう指示することができます。サーブレットはこの削除コマンドを正しく受信し、写真を正常に削除します。次に、リダイレクトを最初のページ(GET)に戻します。

何らかの理由で、このリダイレクトが失敗します。私は方法や理由はわかりませんが、FirefoxのHTTPFoxプラグインを使用すると、POSTリクエストが応答で0バイトを受信し、NS_BINDING_ABORTEDというコードがあることがわかります。

私はリダイレクトを送信するために使用していたコードは、私がリダイレクトを送信するために、ウェブサイト全体で使用している同じコードです:私は、リダイレクトを送信し、最終的なURLをチェックした

response.sendRedirect(Constants.SITE_ROOT + "EditPhotos/" + itemURL); 

、それは間違いです正しいですが、ブラウザはリダイレクトを受信しません。どうして?

答えて

0

POSTを送信するために使用していたJavaScriptが問題であることがわかりました。 は、私はもともとこれを持っていた:私はこれにそれを変更したときに

<a href="#" onClick="javascript:deletePhoto(781)">Delete</a> 

そして、すべてが固定しまっ:

<a href="#" onClick="javascript:deletePhoto(781); return false;">Delete</a> 

deletePhoto機能は次のとおりです。

function deletePhoto(photoID) { 
    doPost(document.URL, {'action':'delete', 'id':photoID}); 
} 

function doPost(path, params) { 
    var form = document.createElement("form"); 
    form.setAttribute("method", "POST"); 
    form.setAttribute("action", path); 
    for(var key in params) { 
     var hiddenField = document.createElement("input"); 
     hiddenField.setAttribute("type", "hidden"); 
     hiddenField.setAttribute("name", key); 
     hiddenField.setAttribute("value", params[key]); 
     form.appendChild(hiddenField); 
    } 
    document.body.appendChild(form); 
    form.submit(); 
} 
はIllegalStateExceptionまたは任意の例外では見つかりませんでした
+0

厳しいものではありませんが、JavaScriptのようなものは常に私にかゆみを与えます。なぜボタン付きフォームだけではないのですか?必要に応じてボタンをプレーンリンクのように表示するには、CSSを使用します。 – BalusC

+0

正直言って、私はなぜ正確にはわからないが、私はそれをこのようにするときにもっときついと思った。小さなフォームをたくさん持っていて、それらをスタイルに合わせて適切に配置しようとすると、CSSeadachesが得られます。 – DanielGibbs

+0

ウェブサイトは、JSが無効になっている(モバイル)と同等に機能するはずです。 JSは、プログレッシブな機能強化のみを行うことになっています。 CSSはあなたがそれを理解するとかなり簡単です。 – BalusC

1

サーバーログを読み取ります。トレースでsendRedirect()コールがあるIllegalStateException: response already committedが表示されますか?

これは、応答ヘッダーがすでに送信されているため、リダイレクトが失敗したことを意味します。 sendRedirect()に電話をかける前に、HttpServletResponseに触れていないことを確認してください。リダイレクトは基本的に新しいURLを値として持つLocationレスポンスヘッダーの存在します。

JavaScriptを使用してリクエストを処理している可能性があります.JavaScriptを使用すると、新しい場所を処理できませんでした。

どちらの場合でも、それでも問題が解決できない場合は、この問題を再現するコピー&ペースト可能な最小のコードスニペットに興味があります。あなたの質問を更新してそれを含めてください。


コメントどおり更新、犯人はJavaScriptで確かです。 XMLHttpRequest POSTのリダイレクトは機能しません。自家製のXMLHttpRequest関数を使用していますか、それともjQueryのようなライブラリですか? jQueryの場合は、慎重にthis questionとお読みください。特定のレスポンスを返し、JS/jQueryに新しいwindow.locationを実行させる必要があるということがあります。

+0

すべてログに記録されます。 POST自体はJavaScript経由で送信されますが、これが問題になる可能性がありますか?私は問題の短い断片を見つけようとします。 – DanielGibbs

+0

回答の更新を参照してください。 – BalusC

+0

しばらくページを更新するのを忘れてしまいました。私はJavaScriptを変更することによってそれを修正することができた、私はそれを下に掲載した。 – DanielGibbs

関連する問題