2011-01-18 12 views
3

存在しない404のページにアクセスし、404が "スロー"され、Grailsがカスタム404エラーページをレンダリングしようとすると、私が持っているいくつかのtaglibから遅延初期化エラーが発生するエラーレイアウトで実行されます。Grails:404と遅延初期化

taglibは、has-manyリレーションシップである別のドメインオブジェクト内のドメインオブジェクトに実際にアクセスしようとします。最初のオブジェクトを取得できますが、関係にアクセスすると、この遅延初期化エラーがスローされます。

ただし、他のページに正しくアクセスした場合は発生しません。カスタムエラーページに直接アクセスしようとしても。 404エラーがスローされた場合のみ。

この間に休止初期化エラーの原因となる休止状態のセッションには何か違いがありますか?

Taglibで遅延初期化されたものにアクセスすることはGrailsではお勧めできませんか?

+0

私は今同じ問題があります。しかし、Spring Securityプラグインのタグsec:ifNotLogInです。例外をスローしませんが、期待どおりに動作しません。 –

+0

私は何度も探していて、これに対する解決策を見つけることができません。私はGrailsのバグのいくつかがまだ解明されていないことを発見しました。しかし、私は完全には分かりません。 – intargc

+1

taglibはどのようにドメインオブジェクトを読み取っていますか? GORM経由で既存のIDを使用してクエリを実行していますか?それとも、セッションからそれを読んでいますか? – david

答えて

2

私は以前これを見てきました。私の通常の解決策は、クエリをコントローラに移動することでした。これはコントローラとGSPのセッションが同じではないという事実によると思います。コントローラ内でほとんどのデータベースの読み込みを行うことをお勧めします。

この場合、コントローラはありません。ハックは...この問題を回避

を取得するよう、あなたが今の行動を強制することはありませんstart a session/end a sessionあなたのGSPおよび/またはタグライブラリ内のことができるかどう

限り私は思って。もう一つのアイデアは、元の(親)オブジェクトにアクセスするのと同時に関係の読み込みを強制することです - これは遅延関係を初期化します。

+0

'withSession {}'呼び出しでデータベースアクセスをラップすると動作します。 – chh

関連する問題