我的代码为当前用户收集一个字符串,如下所示。
package timetracker2
import grails.timesecurity.*
import timetracker2.TimeController
class Time {
def springSecurityService
int id
Project projectname
Date dateCreated
Date dateWorked
Double timeSpent
TimeClassification classification
String currentUser = {
String currentUser = springSecurityService.getCurrentUser()
def user = springSecurityService.getCurrentUser()
String username = user
return username
}
static constraints = {
timeSpent blank: false
classification blank: true
}
static mapping = {
table 'Time'
cache true
id column: 'Time_id'
dateCreated column: 'Date_created'
dateWorked column: 'Date_Worked'
timeSpent column: 'Time_Spent'
currentUser column: 'Username'
}
}
这是我得到的字符串。
timetracker2.Time$_closure1@108115
这是怎么回事???任何帮助将不胜感激。
我也尝试使用get授权,并且尝试在我的person类中添加toString方法。 no没有成功。
最佳答案
我怀疑这里的问题是您在设置springSecurityService
之前尝试使用它。声明中的初始化表达式
String currentUser = springSecurityService.getCurrentUser()
在构造对象时运行,但
springSecurityService
引用此时为null,因为它仅在构造函数完成后才注入(inject)。您可以将引用springSecurityService
的代码放到beforeInsert
事件中,这将使调用延迟到该对象首次保存到DB的位置。而且您可能想要principal.username
而不是getCurrentUser()
(感谢Burt Beckwith提供的指针)class Time {
def springSecurityService
String currentUser
// other fields...
def beforeInsert() {
currentUser = springSecurityService.principal.username
}