Smart GWT不会更新listgrid中的id

时间:2011-03-22 08:59:07

标签: java javascript gwt smartgwt

我在任何浏览器中使用Smart GWT 2.3.0。

我的listgrid只有数据简单。当我创建新的注册表时,它不会更新我的ID。

我阅读了faq problem,我认为我的一切都是正确的。

数据源代码是:

DataSource ds = null;
    try {
        ds = new DataSource();
        ds.setDataURL("do");
        ds.setController(controller);

        DataSourceTextField nombre = new DataSourceTextField("nombre", 
            "Nombre", 50, true);
        DataSourceTextField codigo = new DataSourceTextField("codigo", 
            "Código", 50, true);
        DataSourceTextField id = new DataSourceTextField("id", 
            "Identificador", 50);
        id.setPrimaryKey(Boolean.TRUE);
        id.setCanEdit(Boolean.FALSE);

        ds.setFields(id, codigo, nombre);

控制台结果是:

    16:43:29.808:KPR3:DEBUG:gridEdit:isc_ListGrid_1:showing
     

内联编辑:3,2,将重点关注:   真正       16:43:31.385:KPR5:INFO:gridEdit:isc_ListGrid_1:cellEditEnd:   结束编辑,完成事件:   输入       16:43:31.386:KPR5:DEBUG:gridEdit:isc_ListGrid_1:变化   检测:newValues:{codigo:   “PRUEBA”       nombre:“Prueba”},oldValues:undef       16:43:31.390:KPR5:DEBUG:gridEdit:isc_ListGrid_1:在   字段:codigo应用验证器:[       {type:“isString”,       typeCastValidator:true,       _generated:true,       defaultErrorMessage:“必须是一个字符串。”},       {type:“required”,       defaultErrorMessage:undef,       errorMessage:“字段是必需的”}       价值:PRUEBA       16:43:31.390:KPR5:INFO:gridEdit:isc_ListGrid_1:validateFieldValue,   newValue:“PRUEBA”,通过验证:   true,resulValue:null       16:43:31.392:KPR5:DEBUG:gridEdit:isc_ListGrid_1:在   字段:nombre应用验证器:[       {type:“isString”,       typeCastValidator:true,       _generated:true,       defaultErrorMessage:“必须是一个字符串。”},       {type:“required”,       defaultErrorMessage:undef,       errorMessage:“字段是必需的”}       价值:普鲁巴       16:43:31.393:KPR5:INFO:gridEdit:isc_ListGrid_1:validateFieldValue,   newValue:“Prueba”,通过验证:   true,resulValue:null       16:43:31.393:KPR5:INFO:gridEdit:isc_ListGrid_1:保存   newValues'{codigo:“PRUEBA”,       nombre:“Prueba”}'       16:43:31.996:XRP3:DEBUG:结果集:isc_ResultSet_1   (由...制作:   isc_ListGrid_1):dataSource数据   改变了射击       16:43:31.997:XRP3:INFO:结果集:isc_XDataSource_3:dsResponse   成功操作类型add   没有返回更新记录[s]。   使用提交的请求数据进行更新   ResultSet缓存。       16:43:31.997:XRP3:DEBUG:结果集:isc_XDataSource_3:提交   要集成到缓存中的数据:[       {codigo:“PRUEBA”,       nombre:“Prueba”}       ]       16:43:31.997:XRP3:INFO:结果集:isc_ResultSet_1   (创建者:isc_ListGrid_1):更新   在operationType之后缓存到位:   add,allMatchingRowsCached为true       16:43:31.997:XRP3:INFO:结果集:isc_ResultSet_1   (创建者:isc_ListGrid_1):正在更新   cache:operationType'add'已提交   通过'isc_ListGrid_1',1行更新   数据:       [       {codigo:“PRUEBA”,       nombre:“Prueba”}       ]       16:43:31.998:XRP3:INFO:结果集:isc_ResultSet_1   (创建者:isc_ListGrid_1):本地   应用过滤器:匹配4条记录中的4条   过滤:{       }       16:43:31.999:XRP3:INFO:结果集:isc_XDataSource_3:dsResponse   成功操作类型add   没有返回更新记录[s]。   使用提交的请求数据进行更新   ResultSet缓存。       16:43:31.999:XRP3:DEBUG:结果集:isc_XDataSource_3:提交   要集成到缓存中的数据:[       {codigo:“PRUEBA”,       nombre:“Prueba”}       ]       16:43:32.004:RDQ5:DEBUG:结果集:isc_ResultSet_1   (由...制作:   isc_ListGrid_1):getRange(0,3)   从缓存中得到满足

抱歉,我忘记说它在插入中发生的情况相同,这是插入日志:

13:22:09.162:KPR3:DEBUG:gridEdit:isc_ListGrid_0:change detection: newValues: {codigo: "prueba",
nombre: "prueba"}, oldValues: undef
13:22:09.167:KPR3:DEBUG:gridEdit:isc_ListGrid_0:At field: codigo applying validators: [
{type: "isString",
typeCastValidator: true,
_generated: true,
defaultErrorMessage: "Debe ser una Cadena."},
{type: "required",
defaultErrorMessage: undef,
errorMessage: "Campo es obligatorio"}
] to value:prueba
13:22:09.168:KPR3:INFO:gridEdit:isc_ListGrid_0:validateFieldValue, newValue: "prueba", passed validation: true, resultingValue: null
13:22:09.170:KPR3:DEBUG:gridEdit:isc_ListGrid_0:At field: nombre applying validators: [
{type: "isString",
typeCastValidator: true,
_generated: true,
defaultErrorMessage: "Debe ser una Cadena."},
{type: "required",
defaultErrorMessage: undef,
errorMessage: "Campo es obligatorio"}
] to value:prueba
13:22:09.172:KPR3:INFO:gridEdit:isc_ListGrid_0:validateFieldValue, newValue: "prueba", passed validation: true, resultingValue: null
13:22:09.172:KPR3:INFO:gridEdit:isc_ListGrid_0:Saving newValues '{codigo: "prueba",
nombre: "prueba"}'
13:22:10.612:XRP7:DEBUG:ResultSet:isc_ResultSet_0 (created by: isc_ListGrid_0):dataSource data changed firing
13:22:10.612:XRP7:INFO:ResultSet:isc_XDataSource_1:dsResponse for successful operation of type add did not return updated record[s]. Using submitted request data to update ResultSet cache.
13:22:10.612:XRP7:DEBUG:ResultSet:isc_XDataSource_1:Submitted data to be integrated into the cache:[
{codigo: "prueba",
nombre: "prueba"}
]
13:22:10.613:XRP7:INFO:ResultSet:isc_ResultSet_0 (created by: isc_ListGrid_0):updating cache in place after operationType: add, allMatchingRowsCached true
13:22:10.613:XRP7:INFO:ResultSet:isc_ResultSet_0 (created by: isc_ListGrid_0):Updating cache: operationType 'add' submitted by 'isc_ListGrid_0',1 rows update data:
[
{codigo: "prueba",
nombre: "prueba"}
]
13:22:10.614:XRP7:INFO:ResultSet:isc_ResultSet_0 (created by: isc_ListGrid_0):Local filter applied: 3 of 3 records matched filter:{
}
13:22:10.615:XRP7:INFO:ResultSet:isc_XDataSource_1:dsResponse for successful operation of type add did not return updated record[s]. Using submitted request data to update ResultSet cache.
13:22:10.615:XRP7:DEBUG:ResultSet:isc_XDataSource_1:Submitted data to be integrated into the cache:[
{codigo: "prueba",
nombre: "prueba"}
]
13:22:10.627:RDQ9:DEBUG:ResultSet:isc_ResultSet_0 (created by: isc_ListGrid_0):getRange(0, 2) satisfied from cache

这就是将我的服务器JSON作为响应添加到新的寄存器:

input: {
    "__requestBody": {
        "dataSource": "isc_XDataSource_1",
        "operationType": "add",
        "data": {
            "nombre": "prueba",
            "codigo": "prueba"
        },
        "componentId": "isc_ListGrid_0",
        "oldValues": null
    },
    "inputfields": [
        {
            "value": "prueba",
            "property": "nombre"
        },
        {
            "value": "prueba",
            "property": "codigo"
        }
    ],
    "__requestFormat": "smartgwt",
    "__httpSession": "org.apache.catalina.session.StandardSessionFacade@1c2b15c",
    "__http_request": "org.apache.catalina.connector.RequestFacade@18d70a6",
    "fields": [
        {
            "name": "id",
            "property": "id"
        },
        {
            "name": "codigo",
            "property": "codigo"
        },
        {
            "name": "nombre",
            "property": "nombre"
        }
    ]
}

这是我对更新寄存器的回应:

{
    "id": "1",
    "__requestBody": {
        "dataSource": "isc_XDataSource_2",
        "operationType": "update",
        "data": {
            "nombre": "prueba2",
            "id": "1"
        },
        "componentId": "isc_ListGrid_0",
        "oldValues": {
            "id": "1",
            "codigo": "prueba",
            "nombre": "prueba"
        }
    },
    "inputfields": [
        {
            "value": "prueba2",
            "property": "nombre"
        },
        {
            "value": "1",
            "property": "id"
        }
    ],
    "__requestFormat": "smartgwt",
    "__httpSession": "org.apache.catalina.session.StandardSessionFacade@1c2b15c",
    "__http_request": "org.apache.catalina.connector.RequestFacade@1d40d08",
    "fields": [
        {
            "name": "id",
            "property": "id"
        },
        {
            "name": "codigo",
            "property": "codigo"
        },
        {
            "name": "nombre",
            "property": "nombre"
        }
    ]
}

2 个答案:

答案 0 :(得分:0)

您无法使用更新更改主键(就像在SQL中一样)。删除,然后添加。

答案 1 :(得分:0)

日志告诉你到底出了什么问题:

16:43:31.999:XRP3:INFO:ResultSet:isc_XDataSource_3:dsResponse对于类型add的成功操作没有返回更新的记录[s]。使用提交的请求数据更新ResultSet缓存。

你的JSON响应基本上只是随机数据,SmartGWT不知道如何处理它因为你没有声明它的格式或含义。因此,SmartGWT只使用提交的数据作为更新数据,提交的数据显然不包含您在服务器上生成的新ID值。

从“快速入门指南”,“数据集成”一章开始,并按照所有链接进一步参考。简而言之,您的DataSource声明告诉SmartGWT如何处理您的响应。您可以使用推荐的格式(RestDataSource),或者您可以声明诸如recordXPath之类的属性,以使SmartGWT解析您现有的格式。