我有:
def userList = [];
if(!User.findAllByGrade(10)){
userList.add(new User());
}else{ ..... }
<g:each in="${userList}" var="user">
<!-- my big form -->
</g:each>
我需要显示一个表单,无论用户是否存在......所以我只是将“虚拟”用户添加到列表中。但它会产生错误:
消息:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:用户 引发者:object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:User
我可以用来复制表格,但我只是想知道如何解决这个问题......
答案 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>