не удалось лениво инициализировать коллекцию ролей - PullRequest
3 голосов
/ 27 января 2011

Привет всем, я создаю приложение GRAILS с отношением am: 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   
}

В Hazzard / show следующий код работает нормально

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

Есть какие-нибудь подсказки, где это терпит неудачу?

1 Ответ

2 голосов
/ 27 января 2011

Более подходящим подходом к тому, что вы пытаетесь сделать, было бы выполнение 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. Тем не менее, использование более правильной идиомы для запросов и рендеринга представлений поможет вам избежать этой ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...