这一定非常简单,但对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 。
感谢您的帮助!
答案 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++
}
}