2011-02-15 121 views
2

我:Grails领域,但不保存

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


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

我需要的用户是否存在显示表单...所以我只需要添加“伪”用户到列表中。但它会产生错误:

消息:对象引用一个未保存的瞬态的实例 - 冲洗之前保存的瞬态的实例:用户 产生的原因:对象引用一个未保存的瞬态的实例 - 冲洗之前保存的瞬态的实例:用户

我可以使用复制的形式,但我只是不知道如何解决这个...

+0

@ nightinagle2k1:对不起,如果用户不存在,你怎么能把信息在g:每个?或者你不需要这些信息? – 2011-02-15 08:08:42

+0

这是确切的代码?如果将新的User实例附加到已经在Hibernate会话中的域对象,通常会得到该错误。上面的代码似乎没有这样做。 这是否是`if`或者`else`失败? – 2011-02-15 08:15:16

回答

1

怎么样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> 
0

有点脏,但它应该工作:

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

因此,而不是创建一个新的用户实例,只需添加一个空的哈希表,以列表;如果结果不正常,则需要做更多的工作:

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

I.e.在散列表中创建对应于User属性的条目。

0

如何添加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>