0

Extjs 4.2 アプリを Extjs 5.0 にアップグレードしています。
すべての読み取り専用ページを表示できますが、データを更新/保存しようとすると問題が発生します。私は本当にあなたの助けに感謝します!!

モデル データの値がサーバー側に表示されません。console.log(model) を使用してモデルを出力でき、すべての値が含まれていますが、サーバー側では id のみがあり、他のすべてのパラメーターは次のように表示されます。ヌル。

モデルのプロキシは次のとおりです。


     Ext.define('MyApp.model.User', {
      extend: 'Ext.data.Model',
      id: 'user',
      proxy: {
        type: 'rest',
        url : '/rest/update/user',
        listeners: {
          exception: function(proxy, response, operation) {
            Ext.Msg.alert('Failed', 'Save the user Failed!');
          }
        }
      },
      fields: [
        {name: 'id', type: 'int'},
        {name: 'userName', type: 'string'},
        {name: 'country', type: 'string'}
        ]
    }

コントローラー:

onUserUpdateAction: function(button, event, action) { 

      var model = Ext.create('MyApp.model.User');    
      model.set('id', "123"); 
      model.set('userName', "john");
      model.set('country', "usa");
      ---
      model.commit() / without commit() it does not add the id in URL like /user/123
      model.save();
}

サーバー側のコードは次のとおりです。

@PUT
@Consumes({ "application/json" })
@Path("/Update/user/{id}")
updateUser(@PathParam("id") final int id, final User record);

実装クラスの最初の行のログ、id はありますが、他のすべての値は null です

*** In updateUser() method, id : 123, record: User(id=123, **userName=null, country=null**)
4

1 に答える 1

1

ここでの問題は、Ext をだまそうとすることです。ID を使用して新しいレコードを作成します。通常、ID はサーバーによって割り当てられます。したがって、コミットして (新しいレコード) フラグをクリアする必要がありますphantom。これにより、Ext はそれが既に存在するレコードであると認識します。ただし、コミット後、レコードには変更されたフィールドはなく、デフォルトでは、変更されたフィールドのみがサーバーに送信されます。したがって、次のようなライターを構成する必要があります。

Ext.define('MyApp.model.User', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'userName', type: 'string'},
        {name: 'country', type: 'string'}
    ],

    proxy: {
        type: 'rest',
        url : 'success.php',
        listeners: {
            exception: function(proxy, response, operation) {
                Ext.Msg.alert('Failed', 'Save the user Failed!');
            }
        }
        ,writer:{
             type:'json'
            ,writeAllFields:true
        }
    }
});
于 2014-06-16T19:33:59.550 に答える