0

現在のユーザーの文字列を収集する私のコードは次のようになります。

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 authentication も使用してみました。また、個人クラスに toString メソッドを追加しようとしました。残念ながら成功しません。

4

2 に答える 2

2

springSecurityServiceここでの問題の一部は、設定する前に使用しようとしていることにあると思われます。宣言の初期化式

String currentUser = springSecurityService.getCurrentUser()

オブジェクトが構築されたときに実行されますspringSecurityServiceが、コンストラクターが終了した後にのみ注入されるため、この時点では参照は null です。springSecurityService代わりにイベントを参照するコードを配置するとbeforeInsert、オブジェクトが最初に DB に保存されるまで呼び出しが遅延します。そして、おそらくprincipal.username代わりにgetCurrentUser()(ポインタを提供してくれた Burt Beckwith に感謝します)

class Time {
  def springSecurityService

  String currentUser
  // other fields...

  def beforeInsert() {
    currentUser = springSecurityService.principal.username
  }
于 2013-02-02T15:46:22.383 に答える
0

呼び出されたときに現在のユーザーを返すクロージャーをcurrentUser呼び出した結果で変数を初期化しています。toString()

あなたが欲しいのは

String currentUser = springSecurityService.getCurrentUser()

currentUserによって返される値で変数を初期化しますspringSecurityService.getCurrentUser()

于 2013-02-02T14:10:58.590 に答える