2012-01-25 10 views
0

私はgrailsを初めて使ったので、コントローラ間でモデルをどのように渡すことができるのか答えを見つけることができませんでした。(Resolved、Bypassed)Grails:他のコントローラのビューにモデルを渡す方法は?

私は、潜在的なクライアントビューとクライアントの要求のビューがあることを、このような状況を持っています。

ユーザーが潜在的なクライアント情報から、クライアントの要求を作成したいということも可能です。私はモデルを埋めることについて考え

ClientRequestControllerのcreateアクションにPotentialClientControllerチェーンのincideのtransormアクションオブジェクト。ユーザーが保存する前にデータを編集する機能を持っていれば、保存しないことを決めるのが良いでしょう。だから私はいっぱいに保存ClientRequestインスタンス内アクションを変換するには、それをに転送したい別のコントローラのビューを作成します。そして、私はのparamsを処理したくないアクションを作成します。もちろん、私はすでに存在しないオブジェクトのIDを渡すことができますし、アクションを作成内部それらを使用しますが、私はモデルに合格することがsimplierでしょう。

正しい方法は何ですか?

以下

は、私が何をしようとしているのサンプルです: は、潜在的なクライアントコントローラのアクションを変換:

def transform = { 
    def requestor = User.getByUsername(principal.username) 

    def potentialClientInstance = PotentialClient.get(params.id) 
    boolean hasEnoughtRights = checkRights() 
    if(!hasEnoughtRights) { 
     redirect(controller: 'login', action: 'denied') 
    } 

    ClientRequest clientRequestInstance = new ClientRequest() 

    ContactPerson contactPersonInstance = ContactPerson.get(potentialClientInstance?.contactPerson?.id) 
    Contact mobilePhoneContactInstance 
    Contact workPhoneContactInstance 
    Contact homePhoneContactInstance 
    Contact organizationPhoneContactInstance 
    Contact emailContactInstance 
    ........................... 

    clientRequestInstance?.ownedBroker = requestor 
    clientRequestInstance?.organization = Organization.get(potentialClientInstance?.organization?.id) 
    clientRequestInstance?.brand = new Brand(name: clientRequestInstance?.organization?.getBrandsString()) 
    clientRequestInstance?.estateType = EstateTypeDic.get(potentialClientInstance?.estateType?.id) 
    clientRequestInstance?.footageFrom = potentialClientInstance?.footageFrom 
    clientRequestInstance?.footageTo = potentialClientInstance?.footageTo 
    clientRequestInstance?.priceFrom = potentialClientInstance?.priceFrom 
    clientRequestInstance?.priceTo = potentialClientInstance?.priceTo 
    clientRequestInstance?.currency = CurrencyDic.get(potentialClientInstance?.currency?.id) 
    clientRequestInstance?.requestComment = Comment.get(potentialClientInstance?.comment?.id) 
    clientRequestInstance?.comments?.setComments(potentialClientInstance?.comments) 
    clientRequestInstance?.district = District.get(potentialClientInstance?.address?.district) 
    clientRequestInstance?.addedBy = requestor 
    clientRequestInstance?.modifiedBy = requestor 


    chain (controller: 'clientRequest', action: 'create', model: [clientRequestInstance:clientRequestInstance, contactPersonInstance:contactPersonInstance, mobilePhoneContactInstance:mobilePhoneContactInstance, workPhoneContactInstance:workPhoneContactInstance, homePhoneContactInstance:homePhoneContactInstance, organizationPhoneContactInstance:organizationPhoneContactInstance, emailContactInstance:emailContactInstance,]) 
} 

クライアント要求コントローラ

def create = { 
     def clientRequestInstance = new ClientRequest() 
     clientRequestInstance.properties = params 
     return ['clientRequestInstance':clientRequestInstance] 
} 
+0

私はその理由を知っていると思い、これは、内部の新しいオブジェクトを作成するにDEF clientRequestInstance =新しいClientRequest() アクション:) を作成しかし、私はまだ私のモデルを渡すことはできませんが... – Milkywayfarer

答えて

0

ソリューションのアクションを作成しましたものすごく単純。

私は行動を変革におけるリダイレクトを使用してのparamsとしての潜在的なクライアントのIDを渡さ:

def transform = { 
     def requestor = User.getByUsername(principal.username) 

     def potentialClientInstance = PotentialClient.get(params.id) 
     boolean hasEnoughtRights = checkRights() 
     if(!hasEnoughtRights) { 
       redirect(controller: 'login', action: 'denied') 
     } 

    redirect(controller: 'clientRequest', action: 'create', params: [potentialClientId: params.id]) 
} 

そして、内部のクライアント要求コントローラのアクションを作成潜在Clientインスタンスを必要とし、同じコードでモデルを埋めてしまった、このIDを使用しました。

def create = { 

     def clientRequestInstance = new ClientRequest() 
     def requestor = User.getByUsername(principal.username) 

     ContactPerson contactPersonInstance 
     Contact mobilePhoneContactInstance 
     Contact workPhoneContactInstance 
     Contact homePhoneContactInstance 
     Contact organizationPhoneContactInstance 
     Contact emailContactInstance 
     if(params.potentialClientId) { 
      PotentialClient potentialClientInstance = PotentialClient.get(params.potentialClientId) 

      clientRequestInstance = new ClientRequest() 

      contactPersonInstance = ContactPerson.get(potentialClientInstance?.contactPerson?.id) 

          ............................... 

      clientRequestInstance?.ownedBroker = requestor 
      clientRequestInstance?.organization = Organization.get(potentialClientInstance?.organization?.id) 
      clientRequestInstance?.organization?.ownedBroker = requestor 
      String brands = clientRequestInstance?.organization?.getBrandsString() 
      if(brands) { 
       clientRequestInstance?.brand = new Brand(name: clientRequestInstance?.organization?.getBrandsString()) 
      } 
      clientRequestInstance?.estateType = EstateTypeDic.get(potentialClientInstance?.estateType?.id) 
      clientRequestInstance?.footageFrom = potentialClientInstance?.footageFrom 
      clientRequestInstance?.footageTo = potentialClientInstance?.footageTo 
      clientRequestInstance?.priceFrom = potentialClientInstance?.priceFrom 
      clientRequestInstance?.priceTo = potentialClientInstance?.priceTo 
      clientRequestInstance?.currency = CurrencyDic.get(potentialClientInstance?.currency?.id) 
      clientRequestInstance?.requestComment = Comment.get(potentialClientInstance?.comment?.id) 
      potentialClientInstance?.comments?.each { 
       clientRequestInstance?.addToComments(it) 
      } 
      clientRequestInstance?.district = District.get(potentialClientInstance?.address?.district) 
      clientRequestInstance?.addedBy = requestor 
      clientRequestInstance?.modifiedBy = requestor 

     } else { 
      clientRequestInstance.properties = params 
     } 
     return ['clientRequestInstance': clientRequestInstance, 'contactPersonInstance': contactPersonInstance, 
      'mobilePhoneContactInstance': mobilePhoneContactInstance, 
      'workPhoneContactInstance': workPhoneContactInstance, 
      'homePhoneContactInstance': homePhoneContactInstance, 
      'organizationPhoneContactInstance': organizationPhoneContactInstance, 
      'emailContactInstance': emailContactInstance] 
    } 
関連する問題