2011-01-27 30 views
3

ちょっと、私はm:mdbの関係でGRAILSアプリケーションを構築しています。エントリを表示しようとすると、「遅延収集に失敗しました。ロールのコレクションを初期化できません...セッションまたはセッションが閉じられませんでした」というエラーが表示されます。ロールのコレクションを遅延して初期化できませんでした

一つのクラスは次のとおりです。

class Hazzard{ 

static hasMany = [warning:Warning] 

static constraints = { 
    text(size:1..5000) 
} 

    String name 
    String text 
    String toxicity 
} 

その他:

ハザード/で
class Warning{ 

static hasMany = [hazzard:Hazzard] 
static belongsTo = Hazzard 

static constraints = { 
    text(size:1..5000) 
} 

    String code 
    String text 
} 

は、次のコードは、

<g:each in="${hazzardInstance.warning}" var="p"> 
<li><g:link controller="Warning" action="show" id="${p.id}">${p?.encodeAsHTML()}</g:link></li> 
</g:each> 

正常に動作しますが、他のページに次のコードが提供されます表示さエラー:

<g:set var="haz" value="${Hazzard.get(params.id)}" /> 
<h1>${haz.name}</h1> 
<p>${haz.text}</p> 
<h1>Toxiciteit</h1> 
<p>${haz.toxicity}</p> 
<br/> 
<h1>Gevaren(H) en voorzorgen(P)</h1> 
<g:each in="${haz.warning}" var="p"> --> This is where the error pops-up 
    ${p.text} 
</g:each> 

これはどこで失敗するのか?

+0

Grailsのどのバージョンをお使いですか? –

+0

私はGRAILSバージョンを使用しています:1.3.6 – BadSkillz

答えて

2

コントローラでgetを実行し、見つかったドメインオブジェクトをレンダリング用のビューに渡すことが、より適切な方法です。ような何か:私はそのような多くの問題は、Grailsのより多くの最近のバージョンで修正されたと思ったが、ビューにGORM検索を行う

// MyController.groovy 
class MyController { 
    def myAction = { 
     def haz = Hazzard.get(params.id) 
     render(view: 'myview', model: [hazzardInstance: haz]) 
    } 
} 

// my/myview.gsp (the view from your second GSP code block) 
<h1>${hazzardInstance?.name.encodeAsHTML()}</h1> 
... 
<h1>Gevaren(H) en voorzorgen(P)</h1> 
<g:each in="${hazzardInstance?.warning}" var="p">...</g:each> 

は時々、あなたが取得している例外につながることができます。それにもかかわらず、ビューを照会しレンダリングするためのより正確なイディオムを使用すると、このエラーを回避するのに役立ちます。

+0

Spot-onは、夢のように動作します! – BadSkillz

関連する問題

 関連する問題