Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
grails当参数列表过长时,会丢失一些数据_Grails_Parameter Passing - Fatal编程技术网

grails当参数列表过长时,会丢失一些数据

grails当参数列表过长时,会丢失一些数据,grails,parameter-passing,Grails,Parameter Passing,我有一个控制器,可以插入一个国家的城市。 一切正常,直到列表变得太长,数据被忽略 在调试过程中,我发现: println "0-" + params def instance = Country.get(params.id) instance.properties = params println "1-" + instance.areas println "2-" + instance.areas.size() println参数正确显示所有区域 println instance.areas

我有一个控制器,可以插入一个国家的城市。 一切正常,直到列表变得太长,数据被忽略

在调试过程中,我发现:

println "0-" + params
def instance = Country.get(params.id)
instance.properties = params
println "1-" + instance.areas
println "2-" + instance.areas.size()
println参数正确显示所有区域

println instance.areas缺少新区域

println instance.areas.size()显示旧的大小数

如果一个国家的面积很小,那么一切正常


谢谢

我希望您会遇到数据绑定器对自动增加一个集合的大小施加的限制。默认值为256。您可以通过在
grails app/conf/Config.groovy
中将
grails.databinding.autoGrowCollectionLimit
设置为更高的数字来更改此值

请参阅描述此属性的“数据绑定和多个结束关联”部分

编辑(解决下面评论中留下的问题):


嗨,杰夫,我正试图提交大量的参数列表,我 获取9842个参数到Controller,其中缺少一些参数。怎么 我能解决它。Grails:2.3.8

请参阅上的项目


有多少项太多?你是说500,50000还是什么?你描述的行为使我惊讶。如果你能显示足够的代码来重现问题,我很乐意看一看。255是你看到的极限吗?嗨,杰夫,我正试图提交大量的参数列表,我正在向Controller提交9842个参数,其中缺少一些参数。如何解决这个问题。Grails:2.3。8@Asif我创建了一个示例应用程序,演示如何支持它。请参阅我在上面的答案中添加的更新信息。谢谢杰夫,谢谢你的回复!我已经添加了
grails.databinding.autoGrowCollectionLimit=20_000
我检查了DOM,DOM生成了大约10216个参数,但是当我提交(表单提交)时,控制器中仍然有9845个参数。如果您可以向我的回购发送一个PR,它显示了一个有问题的场景,我很乐意看一看。
package asifbindinglimit

import grails.converters.JSON

class DemoController {

    def createWidget(Widget w) {
        render w as JSON
    }
}

class Widget {
    List<String> names
}
grails.databinding.autoGrowCollectionLimit = 10_000
package asifbindinglimit

import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(DemoController)
class DemoControllerSpec extends Specification {

    void "test parameter binding"() {
        given:
        9482.times {
            params."names[${it}]" = "Value ${it}"
        }

        when:
        controller.createWidget()

        then:
        response.json.names.size() == 9482
        response.json.names[0] == 'Value 0'
        response.json.names[1] == 'Value 1'
        response.json.names[2] == 'Value 2'
        response.json.names[9479] == 'Value 9479'
        response.json.names[9480] == 'Value 9480'
        response.json.names[9481] == 'Value 9481'
    }
}