grails list和createCriteria()

Cof*_*ern 0 search grails list createcriteria

我有一个grails web应用程序的列表功能.此列表将根据某些搜索条件填充表格.我正在使用hibernate createCriteria来尝试实现这一点.

在这种情况下,他们可以搜索2个不同的关键功能.用户名和userNumber.

我唯一的问题是尝试定制函数,以便在找到空值时,它将提示用户其中一个值为null.用户名必须有userNumber.如果由于某种原因userNumber为null,则需要提示用户.或者,如果找不到用户名和userNumber的组合,它也会提示用户.

这是我的列表函数和搜索条件.底部的println用于调试,并显示我想要做的事情.

def list(params) {
//TODO STILL NOT WORKING RIGHT  
def userSearchCri = User.createCriteria()

    def userNumber = params.searchUserNumber
    def username = params.searchUsername
    uerSearchCri = User.createCriteria()



    def userList = userSearchCri.list() {

        eq('username', username)
        eq('userNumber', userNumber)
    }

    System.out.println("Search: " + userList.userNumber)
    if(userList.userNumber == "null"){
        System.out.println("OH NO! The Users Number is = " + userList.userNumber + " DO SOMETHING!")
    }


    [userInstanceList: userList]
    } 
Run Code Online (Sandbox Code Playgroud)

Iv尝试了createCriteria函数的不同组合.喜欢isNotNull,ilike,等...我开始认为我无法用createCritera做到这一点.这是用于createCriteria http://grails.org/doc/2.2.1/ref/Domain%20Classes/createCriteria.html的源代码.

如果有人知道我如何能够实现我的目标,要么使用搜索条件,要么使用其他方法.我非常感谢一些建议.

谢谢

dma*_*tro 5

各种要点:

  1. 首先,验证params,看看是否userNameANS /或 userNumber通过后,ANS发回信息给用户提供有效的信息.通过这种方式,您可以根除用户输入错误的选项.
  2. 使用Criteria返回域对象列表.你必须迭代列表才能获得userName/userNumber.
  3. 拥有有效的用户列表后,您应该能够相应地验证userName/userNumber每个用户对象.

这是一个示例:

    def list(params) {
        def userNumber = params.searchUserNumber
        def username = params.searchUsername
        //Validate whteher params are NULL or valid. Send back error message to user if validation fails
        validateParams()
        uerSearchCri = User.createCriteria()

        def userList = userSearchCri.list() {
           or{
            eq('username', username)
            eq('userNumber', userNumber)
           }
        }

        if(userList){
          userList.each{user->
            if(!user.userName || !user.userNumber){
               //Send error back if needed 
            }
          }
        }
}
Run Code Online (Sandbox Code Playgroud)