2011-02-15 122 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>