0

我最近从 grails 2.2 升级到 2.3.1。我的控制器曾经以控制器参数将数据绑定到命令对象。在我升级到 2.3.1 后,绑定似乎不起作用并且出现“[致命错误]:-1:-1:文件过早结束。” 输出到控制台。

它在 2.2 上运行良好,就像这样 def home(ACommand cmd) {}

升级后,它会在进入动作之前输出“文件提前结束”并跳过动作方法并直接进入 home.gsp 视图。

我还尝试在操作中新建一个实例并使用 bindData(cmd, params)。当我逐步执行该操作时,bindData 方法产生了相同的消息,但可以继续并生成视图模型并传递给 home.gsp。

有谁碰巧知道可能导致问题的原因?谢谢。

4

2 回答 2

1

Grails 2.3 包括一个新的数据绑定机制,它具有额外的特性。如果您需要访问遗留的 spring 数据绑定机制,请使用此配置Config.groovy

grails.databinding.useSpringBinder=true

最终,如果您觉得需要使用最新的数据绑定器,则需要过渡到使用新功能

于 2013-11-07T13:51:54.360 回答
0

谢谢dmahapatro。我以前尝试过,但不起作用。

仅供参考,我通过在 Config.groovy 重新安排内容协商来修复它。

从改变

mime.types = [ xml: ['text/xml', 'application/xml'],
        text: 'text/plain',
        js: 'text/javascript',
        rss: 'application/rss+xml',
        atom: 'application/atom+xml',
        css: 'text/css',
        csv: 'text/csv',
        all: '*/*',
        json: 'text/json',
        html: ['text/html','application/xhtml+xml']
]

mime.types = [
        all:           '*/*',
        atom:          'application/atom+xml',
        css:           'text/css',
        csv:           'text/csv',
        form:          'application/x-www-form-urlencoded',
        html:          ['text/html','application/xhtml+xml'],
        js:            'text/javascript',
        json:          ['application/json', 'text/json'],
        multipartForm: 'multipart/form-data',
        rss:           'application/rss+xml',
        text:          'text/plain',
        hal:           ['application/hal+json','application/hal+xml'],
        xml:           ['text/xml', 'application/xml']
]

解决问题。

不知道为什么顺序很重要,但我认为这是由 Grails 2.3 数据绑定打算解析请求正文并绑定到我的命令对象并导致 xml 解析器错误引起的。

于 2013-11-08T13:05:44.390 回答