繁体   English   中英

Groovy:访问父类中的属性

[英]Groovy: Accessing properties in Parent class

这一定很容易,但是对于Grails&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++;
     }
}

这里的目标是获取用户类型(“管理员”或“来宾”或“ IT”或“主管”)的列表以及每种用户类型的总数。

例如,管理员= 230,访客= 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

感谢您的帮助!

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

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

我认为使用的语法是不可能的。 UserInfo.each指的是对UserInfo类的静态成员的描述。 但是,如果您想枚举事物,可以使用以下语法来完成。

    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++
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM