2011-01-27 5 views
3

Привет всем, Я создаю приложение GRAILS с отношением m: m db. Когда я пытаюсь показать записи, хорошо известные «не лениво инициализировать коллекцию роли ... сеанс или сеанс закрыты», отображается ошибка.не удалось лениво инициализировать коллекцию роли

Один класс:

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 в контроллере и передать найденный объект домена в представление для рендеринга. Что-то вроде:

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

Ведение Горм поиски в целях иногда может привести к исключению вы получаете, хотя я думал, что многие проблемы, как, что было зафиксировано в более поздних версиях Grails. Тем не менее, использование более правильной идиомы для запросов и представлений рендеринга поможет вам избежать этой ошибки.

+0

Spot-on, работает как сон! – BadSkillz

Смежные вопросы