grails域而不保存它

时间:2011-02-15 04:06:57

标签: java hibernate grails dns gorm

我有:

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


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

我需要显示一个表单,无论用户是否存在......所以我只是将“虚拟”用户添加到列表中。但它会产生错误:

  

消息:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:用户   引发者:object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:User

我可以用来复制表格,但我只是想知道如何解决这个问题......

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

有点脏,但应该有效:

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

因此,不要创建新的User实例,只需将空哈希表添加到列表中;如果结果不好看,你需要做更多的工作:

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

即。在哈希表中创建与User的属性对应的条目。

答案 2 :(得分: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>