2017-05-22 11 views
-1

これらのレコードを作成して更新するために、レコードとフォームでグリッドを実装しました。レコードを編集し、その後、それを保存する場合、クライアントは、次の行を通過します:TomcatサーバーへのExtJS PUT要求が許可されていません

var form = this.getView().getForm(); 
var record = form.getRecord(); 
record.beginEdit(); 
var updatedRecord = form.getValues(); 
record.set(updatedRecord); 
record.endEdit(); 

それを行うことで、クライアントは、体内の更新されたパラメータでTomcatサーバーにPUTリクエストを送信します。

私はHTTPリクエストを送信するためには、ブラウザのプラグインを使用
<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
    <param-name>cors.allowed.origins</param-name> 
    <param-value>*</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.methods</param-name> 
    <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.headers</param-name> 
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.exposed.headers</param-name> 
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.support.credentials</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.preflight.maxage</param-name> 
    <param-value>10</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

私たちは、この応答に見ることができるように、すべてが正常である:

Tomcatサーバーはweb.xmlに設定され、すべてのHTTPメッセージを許可します

Status Code: 200 OK 
Allow: PUT 
Content-Language: en 
Content-Length: 190 
Content-Type: application/json 
Date: Mon, 22 May 2017 12:21:40 GMT 
Server: Apache-Coyote/1.1 

しかし、ExtJSには、PUTリクエストを送信したとき、私は次の応答を取得:

HTTP/1.1 405 Method Not Allowed 
Server: Apache-Coyote/1.1 
Access-Control-Allow-Origin: http://localhost:1337 
Access-Control-Allow-Credentials: true 
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-Credentials 
Allow: DELETE,GET,OPTIONS 
Content-Type: text/html;charset=utf-8 
Content-Language: en 
Content-Length: 1056 
Date: Mon, 22 May 2017 11:55:37 GMT 

ExtJSがPUTリクエストを送信すると、tomcatがPUT、GET、POSTを許可しないのはなぜですか? ExtJSには、POSTリクエストを送信すると、すべてが正常に動作し、私は次の応答を得る:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://localhost:1337 
Access-Control-Expose-Headers:Access-Control-Allow-Origin,Access-Control-Allow-Credentials 
Content-Length:225 
Content-Type:application/json 
Date:Mon, 22 May 2017 12:59:07 GMT 
Server:Apache-Coyote/1.1 

私はPUTメッセージを許可するようにTomcatを取得するために行うには何がありますか?

答えて

0

proxy EXTJSの店舗構成に指定する必要があります。

proxy: { 
    headers: {'Content-Type': "application/json" } 
    ... 
} 

問題を解決する必要があるヘッダーを指定すると思います。

actionMethodでも問題が発生する可能性があります。デフォルトextjs's storeことで

GET要求を送信していますが、それはPUTリクエストを送信する場合、あなたはactionMethods設定

proxy: { 
    actionMethods: { 
      read : 'PUT', 
      create : 'POST', 
      update : 'PUT', 
      destroy : 'DELETE' 
     } 
... 
} 

に指定することができlinkを参照してください。

+0

それは役に立たなかった。 – Goldi

+0

サーバーが期待しているヘッダーをすべて入れましたか?またはあなたにバックエンドのリクエストコードを表示することはできますか?あなたはあなたのMediaTypeをチェックしましたか? –

+0

最新の編集済みの回答をご参照ください。お役に立てれば。 –

関連する問題