1

アクションの最後に、次のようにsaveアクションにリダイレクトしshowます。

redirect(action: "show", id: exampleInstance.id)

私のshowアクションでは、誰かがURLを介してこのアクションに直接アクセスしたか、別のアクションからここにリダイレクトされたかを検出できるようにしたいと考えています。試しrequest.isRedirected()ましたが、常に返されますfalse

別のアクションからのリダイレクトの結果としてアクションに参加しているかどうかを検出するにはどうすればよいですか?

4

3 に答える 3

1

確認メッセージを表示したいと思います。Grails には、この種のユースケース向けの組み込み機能があります。

http://www.grails.org/doc/2.1.0/ref/Controllers/flash.html

例を見てください:

class BookController {

    def save() { 
        flash.message = "Welcome!" 
        redirect(action: 'home') 
    }
}

ビューでは、印刷または照合できますflash.message

于 2012-09-04T21:05:13.320 に答える
0

理論的には、isRedirect はリクエスト属性をチェックします。と同等です

import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes
if(request.getAttribute(GrailsApplicationAttributes.REDIRECT_ISSUED) != null){
    println "request was redirect"
}

直接試してみて、何が起こるか教えてください。

于 2012-09-04T20:16:22.613 に答える
0

メソッドロジックで設定されるため、アクションにisRedirected()のみ適用されるGrailsソースのように見え、アクションでは設定されません。saveredirect()show

代わりに、いくつかの手動オプションがあります。1 つは、オブジェクトにフラグを追加することflashです。これは、リダイレクト アクションでテストされます。showこれはフラッシュ スコープ内にあるため、アクションの最後にクリアされます。

 def save() {
     // Do stuff
     flash.redirectFrom = "save"
     redirect(action:"show")
 }

 def show() {
     if (flash.redirectFrom) {
         // Respond to redirect
     }
     // Do other stuff
 }

もう 1 つのオプションは、 a のchain()代わりに呼び出しを発行redirect()し、暗黙的chainModelなオブジェクトをテストすることです。アクションが外部 URL から要求されたchainModel場合、 は存在しません。show

 def save() {
     // Do stuff
     chain(action:"show",model:[from:'show'])
 }

 def show() {
     if (chainModel) {
         // Respond to redirect
     }
     // Do other stuff
 }
于 2012-09-05T14:04:01.647 に答える