Grails领域,但不保存
问题描述:
def userList = [];
if(!User.findAllByGrade(10)){
userList.add(new User());
}else{ ..... }
<g:each in="${userList}" var="user">
<!-- my big form -->
</g:each>
我需要的用户是否存在显示表单...所以我只需要添加“伪”用户到列表中。但它会产生错误:
消息:对象引用一个未保存的瞬态的实例 - 冲洗之前保存的瞬态的实例:用户 产生的原因:对象引用一个未保存的瞬态的实例 - 冲洗之前保存的瞬态的实例:用户
我可以使用复制的形式,但我只是不知道如何解决这个...
答
怎么样if-else的taglib:
<g:if test="${userList}">
<!-- Your form for no-user case here. -->
</g:if>
<g:else>
<!-- Your form for g:each case here. -->
</g:else>
答
有点脏,但它应该工作:
def userList = [];
if(!User.findAllByGrade(10)){
userList.add([:]);
}else{ ..... }
因此,而不是创建一个新的用户实例,只需添加一个空的哈希表,以列表;如果结果不正常,则需要做更多的工作:
def userList = [];
if(!User.findAllByGrade(10)){
userList.add([name:"", age:"", foobar:""]);
}else{ ..... }
I.e.在散列表中创建对应于User
属性的条目。
答
如何添加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>
@ nightinagle2k1:对不起,如果用户不存在,你怎么能把信息在g:每个?或者你不需要这些信息? – 2011-02-15 08:08:42
这是确切的代码?如果将新的User实例附加到已经在Hibernate会话中的域对象,通常会得到该错误。上面的代码似乎没有这样做。 这是否是`if`或者`else`失败? – 2011-02-15 08:15:16