домен grails без сохранения - PullRequest
2 голосов
/ 15 февраля 2011

у меня есть:

def userList = [];
if(!User.findAllByGrade(10)){
   userList.add(new User());
}else{ ..... } 


<g:each in="${userList}" var="user"> 
<!-- my big form -->
</g:each>

Мне нужно отобразить форму независимо от того, существует пользователь или нет ... поэтому я просто добавляю "фиктивного" пользователя в список. Но это приведет к ошибкам:

Сообщение: объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом: Пользователь Причина: объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом: пользователь

Я мог бы использовать для копирования форм, но мне просто интересно, как это решить ...

Ответы [ 3 ]

1 голос
/ 15 февраля 2011

Как насчет тега if-else :

<g:if test="${userList}">
     <!-- Your form for no-user case here. -->
</g:if>
<g:else>
     <!-- Your form for g:each case here. -->
</g:else>
0 голосов
/ 15 февраля 2011

Как насчет добавления null в список вместо new User(), а затем в gsp ссылаться на свойства пользователя с помощью оператора безопасной навигации .? (например, user?.name, чтобы NPE не выбрасывалось)

Так код будет больше похож на:

def userList = [];
if(!User.findAllByGrade(10)){
   userList. << null
}else{ ..... } 


<g:each in="${userList}" var="user"> 
<!-- my big form -->
    <g:textField name="name" value="${user?.name}" />
</g:each>
0 голосов
/ 15 февраля 2011

Немного грязно, но должно работать:

def userList = [];
if(!User.findAllByGrade(10)){
   userList.add([:]);
}else{ ..... } 

Таким образом, вместо создания нового экземпляра пользователя, просто добавьте пустую хеш-таблицу в список; если результат не выглядит хорошо, вам нужно проделать еще немного работы:

def userList = [];
if(!User.findAllByGrade(10)){
   userList.add([name:"", age:"", foobar:""]);
}else{ ..... } 

т.е. создать записи в хеш-таблице, соответствующие атрибутам User.

...