Groovy:访问Parent类中的属性

时间:2014-12-30 23:53:42

标签: grails groovy

这一定非常简单,但对Grails& amp; Groovy的。我正在2.4.3版本中编写Grails应用程序。

有一个名为 UserInfo

的课程
class UserInfo extends UserDetails {

    String userID = ""

    static constraints = {
        userID blank:false
    }   
}

现在是UserDetails类:

class UserDetails {

        String userName = ""
        String userType = ""  // 'Admin' or 'Guest' or 'IT' or 'Supervisor'
        ...................
       //Lot more Informations
        ....................
        static constraints = {
            userName blank:false
            userType blank:false
        }   
    }

现在在另一个控制器类中,我想获取用户类型信息。

def getUserData = {

def type = []
int count = 0

UserInfo.each {
            type [i] = it.userType; // Error: No such property: operator for class: UserInfo
            i++;
     }
}

此处的目标是获取UserTypes列表('Admin'或'Guest'或'IT'或'Supervisor')以及每个用户类型的总数。

例如,Admin = 230,Guest = 120,.........

上面的代码不会这样做,实际上会出错。我想使用上面的数据并绘制一个X - Y图。

理想情况下,我应该将数据放在数组模型中的 def 中,如下所示。

def type = []

type << [totalNum: new Integer("230"), userType: 'Admin']
type << [totalNum: new Integer("120"), userType: 'Guest']
............................................................
............................................................

一旦我将所有数据填充到 def ,我就可以使用Google Visualization轻松绘制图表。

截至目前,我仍然不知道如何从 UserInfo 类的每个实例中提取数据,然后将其转换为 def

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您在这里缺少list()方法:

UserInfo.list().each {...}

答案 1 :(得分:1)

我不认为您使用的语法是可行的。 UserInfo.each指的是UserInfo类的静态成员上的colosure。但是,如果要枚举事物,可以使用以下语法完成此操作。

    class UserInfo {

        enum UserType {
            Admin, Guest, IT
        }

    }

枚举这些然后变成

    def getUserData = {
        def types = []
        def count = 0
        UserInfo.UserType.each { 
            types << it
            count++
        }
    }

但是,在Grails中,对于您的原始课程,您只是错过了findAll()list()对域名对象的调用。但是,如果您有多个用户类型,则会生成重复项。

    def getUserData = {
        def types = []
        def count = 0
        UserInfo.findAll().each{ UserInfo it -> 
            types << it.userType
            count++
        }
    }