0

我正在尝试获取用户等于当前登录用户的域的每个实例。我现在的代码是:

def list(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    if (lookupPerson().username == "admin"){
         adminList(max)
    }
    else{

        def childList = []
        def i = 1
     Child.list().each(){
         if(Child.get(i).user.username == lookupPerson().username){
             def child = Child.get(i)
             childList.add(child)
         }
          i++
     }
        [childInstanceList: childList.list(params), childInstanceTotal: childList.count()]
    }


}

这给了我以下错误 No signature of method: java.util.ArrayList.list() is applicable for argument types: (org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap) values: [[action:list , controller:child, max:10]] 可能的解决方案:last(), first(), asList(), toList(), is(java.lang.Object), wait()

我确信必须有一种更简单、更好的方法来做到这一点。有任何想法吗?

4

4 回答 4

1

您可能可以使用条件查询来执行您想要的操作:

def childList = Child.createCriteria().list(params) {
  user {
    eq('username', lookupPerson().username)
  }
}

如果您params有分页参数,则“总数”将可用childList.totalCount,您无需单独计算。

于 2012-09-13T12:15:16.347 回答
0

请添加域类。

但无论如何,我想,你的“其他”分支应该像这样:

Child.list().each {
    if( it.user.username == lookupPerson().person ) {
        childList.add( it )
    }

}
于 2012-09-13T12:22:36.143 回答
0
def childList = Child.findByUser(lookupPerson.username)

或者

def childList = Child.withCriteria {
    eq("user", lookupPerson)
}
于 2012-09-13T12:25:43.353 回答
0

如果您有 Child 和 User 类...为什么不这样做?...

class Child {
    //properties
    User user
}

class User {
   //properties

  def getChilds() {
     Child.findAllByUser(this)
  }
}

然后你只需要在你的控制器、服务、视图上调用它:

def user = User.findByUsername(params.username)
def childs = user.childs //or user.getChilds()
于 2012-09-13T14:26:08.933 回答