私はで実行JEE6
していて、にglassfish v3
取り組んNetBean6.9
でいRESTful web service
ます。
以下のjavascript関数を含むjspファイルがあります。
基本的にから情報を読み取りHTML input fields
、に変換しJSON format
ます。
次に、を使用してonclick Ajax call
、HTTPPUTメソッドを使用してJSON文字列を送信してみます。UPDATE
(つまり、RESTを使用してdbレコードを作成しようとしています)
私が使用しているjsフレームワークの場合はPrototype1.7
以下の関数をテストすると、常に404が返されるため、「問題が発生しました」というアラートが表示されます。
私の検索によると、1.5バージョンを超えるプロトタイプはHTTP PUT / DELETEメソッドをサポートしており、そうするために、私が行っているようにリクエストURLに_methodを追加します。
var url = "/resources/inventory/" + invId + "?_method=PUT";
これにより、たとえば次のものが作成されます。
http://localhost:8080/NoJSF/resources/inventory/123?_method=PUT
Firebugとコンソールを見て、リクエストが実際にPOSTであることを示しました。わかりませんが、これはPUTメソッドを実現するためにPOSTトンネリングを使用するプロトタイプによるものだと思いますか?
また、Ajaxが呼び出されていても、@ POSTで注釈が付けられたJAX-RSを含むJavaファイルは呼び出されていません(@GETバージョンは別のデータを処理しているため、これは正しいファイルです)。が表示されないので、Ajaxステートメントにバグがあるか、私の考えを超えた何かがあると思われます。誰かが私にヒントを与えることができますか?
function protoAjaxPut() {
//get all fields value and store into json
var invId = document.getElementById("invIdField").value;
var invName = document.getElementById("invNameField").value;
//put info into JSON format
var jsonInput = JSON.stringify(new Array(invName));
var url = "/resources/inventory/" + invId + "?_method=PUT";
new Ajax.Request(url, {
method:'put',
postBody: jsonInput,
ContentType: 'application/json',
onSuccess: function(transport) {
var responseData = transport.responseText;
document.getElementById('putResponseText').innerHTML = responseData;
},
onFailure: function() { alert('something went wrong!')}
})
}//end protoAjaxPut