2011-01-27 119 views
3

嘿,我正在建立一個m:m db關係的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? – 2011-01-27 13:26:30

+0

我正在使用GRAILS版本:1.3.6 – BadSkillz 2011-01-28 17:16:15

回答

2

對於你想要做的事情,更有利的方法是在控制器中執行get,並將找到的域對象傳遞給視圖進行渲染。喜歡的東西:

// 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> 

做GORM查詢視圖有時會導致你得到的例外,雖然我覺得這樣的很多問題都被固定在較新版本的Grails。儘管如此,使用更加正確的查詢和渲染視圖會幫助您避免此錯誤。

相關問題