0

最近、grails 2.2 から 2.3.1 にアップグレードしました。私のコントローラーは、コントローラーパラメーターでデータをコマンドオブジェクトにバインドしていました。2.3.1 にアップグレードした後、バインドが機能していないようで、「[致命的なエラー] :-1:-1: ファイルの終わりが早すぎます。」コンソールに出力します。

この def home(ACommand cmd) {} のように 2.2 で正常に動作します。

アップグレード後、アクションに進む前に 'Premature end of file' を出力し、アクション メソッドをスキップして直接 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 に答える