簡體   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