0

私が保守している GWT アプリケーションに奇妙な新しいバグが発見されました。それがいつ問題になったのかはわかりません。おそらく新しいFirefoxバージョンで。

FormPanel を使用して POST 要求をサーバーに送信しています。これは、基本的にオンラインで見た多くの例と同じです。しかし、実際には PUT 要求が必要なので、隠し入力パラメーターの 1 つに「メソッド」という名前が付けられ、値が「put」になっています。

ここで、Firefox からの Fiddler のリクエストを見ると、QueryString のすべてのパラメーターを使用して GET リクエストに変換されています。IE と Chrome では、パラメーターは POST 要求の本文にあります。

FormPanel.getMethod() の値をアラートに表示しました。IE と Chrome では文字列「post」が表示されますが、firefox では「object HTMLInputElement」が表示されます。残念ながら、ホスト モードのデバッグはこのプロジェクトでは機能しません。

明らかに、FormPanel の getMethod() 関数が、Firefox の実際のフォームのメソッドではなく、method という名前の非表示の入力パラメータを返しているようです。

技術的には、これは私たちが使用している OpenSource プロジェクトからのものであるため、サーブレットを変更することは避ける必要がありますが、隠し入力パラメーターの名前を両端で「_method」に変更することで問題を解決できることがわかりました。

誰もこのようなものを見たことがありますか?Google で何も見つかりません。

更新: 役立つ場合に備えて、GWT 2.3 を使用しています

4

1 に答える 1

0

いくつかの洞察はここにありますPUT、DELETE、HEADなどのメソッドはほとんどのWebブラウザで利用できますか? XMLHttpRequestの使用もお勧めします。この場合、[おそらく]サーバー側で何も変更する必要はありません。

[送信]ボタンを使用する場合は、clickHandler関数に次のように記述できます。

submitMyForm(yourTextBox.getText(), self); 
// self - is the instance of main class (named UploadForm here), needs to be passed here for future reference

そしてさらにいくつか(あなたはあなたのニーズにこれを適応させることができます):

private native void submitMyForm(String text, UploadForm handler)/*-{
   var fd = new FormData();
   fd.append("textValue", text);

   var xhr = new XMLHttpRequest();
   var upload = xhr.upload;

   readyStateChangeHandler = function () {
      if (xhr.readyState == 4) {
         if (xhr.status == 200) {
           var serverResponse = eval(xhr.responseText); // optional               
           handler.@com.project.UploadForm::onUploadIsDone(Lcom/google/gwt/core/client/JavaScriptObject;)(serverResponse);
         } else {
           handler.@com.project.UploadForm::onUploadFailed(I)(status);
         }
      }
   };

   xhr.onreadystatechange = readyStateChangeHandler;
   xhr.open("PUT", yourActionUrlHere);
   xhr.send(formData);
}-*/;
于 2012-09-19T00:01:24.823 に答える