2012-03-17 3 views

答えて

4

アクションは、chain controller methodを使用してチェーンできます。

連鎖を使用すると、あるアクションから次のアクションにモデルを保持することができます。

0

(後期パーティーに、しかし...)私は私が以下を行うことができますGrailsの2.4.4を、使用しています:

def usernameLogin() { 
    SecurityToken securityToken = authService.loginWithUserPass(params.user, params.pass) 
    chain action: 'afterLogin', model: [securityToken: securityToken] 
} 

def ssoLogin() { 
    SecurityToken securityToken = authService.ssoLogin(params.remoteUser, params.key) 
    chain action: 'afterLogin', model: [securityToken: securityToken] 
} 

def afterLogin() { 
    SecurityToken securityToken = (SecurityToken) chainModel['securityToken'] 
    if (securityToken.valid) { 
    forward action: 'loggedInRedirect' 
    } 
    else { 
    forward action: 'loginFailed' 
    } 
} 
  • セキュリティトークンは、文字列や列挙型を含むオブジェクトであります
  • キーホープこのことができ

ターゲットアクション2)chainModelを使用して、ソース・アクション1)を用いて、「チェーン・アクション」です。

0

これまでの回答は不完全です。ですから、私はそれらを入力とともに編集し、より明確にしています。これは、(

def action1() = { 
    DomainClass domainInstance = DomainClass.findById(params.id); 
    chain (action: 'action2', model: [domainInstance: domainInstance]); 
} 

def action2() = { 
    DomainClass domainInstance = chainModel?.domainInstance ?: DomainClass.findById(params.id); 
    [domainInstance: domainInstance]; 
} 

しかし、後継者のアクションは前任者のそれを再利用するのではなく、新鮮なデータベースセッション を使用しているようだ:アクションチェーン

  1. は、2つのオプションがありますGrailsで を設定することもできますが、私はどのようにしてか分かりません)。そのため、遅れた のエンティティが後続アクションに完全にロードされず、 がLazyInitializationExceptionを返すことがあります(もちろんORMの設定にもよる)。

  2. 要求を転送:

    def action1() = { 
        DomainClass domainInstance = DomainClass.findById(params.id); 
        forward (action: 'action2', model: [domainInstance: domainInstance]); 
    } 
    
    def action2() = { 
        DomainClass domainInstance = request?.domainInstance ?: DomainClass.findById(params.id); 
        [domainInstance: domainInstance]; 
    } 
    

前のケースとは異なり、要求の転送は、その遅延ローディングの問題は発生しません既存のセッションを再利用します。

ご覧のとおり、両方の構文はほぼ同じです。しかし、上記の問題のために、問題の要件に従って要求転送を優先すべきです。もう1つの重要な詳細は、ページの読み込み時/読み込み後のアドレスバーに表示されるURLに関するものです。リクエストを転送するとページURLが保持され、アクションを連鎖するとページURLが最新のアクションのURLに変更されます。

関連する問題