0

I have one gsp file which calls a method like this:

<g:link id="${child.id}" action="callChildProfile" controller="profile">${child.firstname}</g:link>

which calls this method

    def callChildProfile(Long id){

           childInstance = Child.get(id)
           System.out.println(childInstance.firstname + "  child instance")
           redirect(action:  "index")

   }

this method set a child instance to a public variable called child instance but when the redirect happens the variable is reset. The reason I redirect is because I want to load up the index page from this controller.

Index looks like this:

        def index() {
        def messages = currentUserTimeline()
        [profileMessages: messages]
         System.out.println(childInstance + " child here")
        [childInstance : childInstance]
    } 
4

2 に答える 2

2

デフォルトでは、コントローラーはプロトタイプスコープです。つまり、ProfileController使用されるインスタンスは、呼び出すリクエストとを呼び出すリクエストで異なりcallChildProfileますindex。したがって、オブジェクトレベルchildInstance変数はリクエスト間で使用できません。

呼び出しでChildインスタンスを使用するには、 chainメソッドを確認してください。index

callChildProfile(Long id){
    // do usual stuff
    chain(action:"index", model:[childInstance:childInstance])
}

def index() {
    // do other stuff
    [otherModelVar:"Some string"]
}

Mapチェーンコールのモデルからaを返すindexと、自動的に追加されるため、childInstancefromcallChildProfileはgspで使用できます。

于 2012-08-29T21:28:36.073 に答える
1

コントローラメソッド(アクション)の変数にはローカルスコープがあるため、そのメソッドでのみ使用できます。新しいインスタンスからIDを渡し、そのIDを使用してオブジェクトを取得する必要があります。

redirect action: "index", id: childInstance.id

とインデックスは

def index(Long id){
    childInstance = Child.get(id)

次に、callChildProfileメソッドは必要ないと結論付けることができます

または、パラメータを使用できます

def index(){
    childInstance = Child.get(params.id)
    if(childInstance){
        doSomething()
    }
    else{
        createOrGetOrDoSomethingElse()
    }
}
于 2012-08-29T18:40:33.310 に答える