2011-11-02 5 views
5

私は私のapp.context特定の方法を設定したとき、私はredirectでいくつかの奇妙な行動に気付いています。私は完全に私の問題を説明しGrailsのJIRAにバグを見つけたが、それはUTRとしてマークされていた:私は現在、Grailsの2.0M2を使用してい
http://jira.grails.org/browse/GRAILS-7546app.contextを使用するとGrailsが間違ったアドレスにリダイレクトされますか?


はここに問題の私の説明です。私は、コントローラにredirectを呼び出すとredirectが、その後どのように私ここで404が原因と私が提供するURI、上にアプリ名を追加して、

app.context=/ 
app.name=foobar 

:私は私のapplication.propertiesファイルで定義された以下の特性を持っています「これをやっメートル:

String partialUrl = createLink(mapping: 'helloworld') // returns `/hello/world` 
redirect(uri: partialUrl) // INCORRECTLY redirects to 
          // `http://mysite.com/foobar/hello/world` 
          // instead of `http://mysite.com/hello/world` 

私は/hello/worldのパスと私のUrlMappings.groovyファイルで定義されたhelloworldという名前のURLマッピングを持っていると仮定します。

だから、長い話を短く、私は/app.contextを設定している場合、私はapp.nameが私の最後のリダイレクトURLに表示するために期待していません。これはバグか、期待される動作

ですか?最も簡単な方法については、あまりにも多くの手作業をせずにリダイレクトURLを構築できますか?

答えて

0

それはあなたの質問への直接のanwserではないのですが、私の習慣です:Tomcatの生産にそれをオーバーライドして、私はそれが私のdevの上で使用するコンテキスト気にしないので、私はGrailsのプロパティでapp.context変更はありません。

+1

右... Tomcatは本番環境でapp.contextを上書きするかもしれませんが、app.contextを使用する代わりに、リダイレクトURLを構築する際にGrailsがapp.nameを使用している 'redirect'のままです。 – Polaris878

1

私はそれを言うことを憎むが、私はどちらかそれを再現することはできません。私は何もしないアクションを作成してもリダイレクトするようにあなたのコードを使用して、(こんにちは命名)1つのコントローラとテストプロジェクトを作成しました:

HelloController.groovy

package test1 

class HelloController { 
    def index() { 
     def model = [:] 
     model.content = 'content...' 
     model 
    } 

    def redir() { 
     String partialUrl = createLink(mapping: 'helloworld') // returns `/hello/world` 
     redirect(uri: partialUrl) // INCORRECTLY redirects to 
          // `http://mysite.com/foobar/hello/world` 
          // instead of `http://mysite.com/hello/world` 
    } 
} 

私はindex.gspで、インデックスページを作成しましたハローコントローラのindexアクションにマップするUrlMappingsのビュー/ハロー

index.gsp

<h1>index.gsp</h1> 
<html> 
    <body> 
     <p>This data is coming from the model:</p> 
     <p>content: ${content}</p> 
    </body> 
</html> 

セットアップのHelloWorld:

UrlMappings.groovy

class UrlMappings { 
    static mappings = { 
     "/helloworld"(controller: "hello", action: "index") 

     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(view:"/index") 
     "500"(view:'/error') 
    } 
} 

そして、私はアプリを実行したときに、私ができるapp.context =/

application.properties

#Grails Metadata file 
#Sun Nov 06 14:51:56 EST 2011 
app.grails.version=2.0.0.RC1 
app.context=/ 
app.name=test1 
app.servlet.version=2.5 
app.version=0.1 

を持っているapplication.propertiesを変更localhost:8080/helloに行き、私の単純なGSPを表示します。私はlocalhost:8080/helloworldを試して、マッピングごとに期待どおりに取得しました。それから私はlocalhost:8080/hello/redirを試して、私はlocalhost:8080/helloworldに正しくリダイレ​​クトされました。

あなたはまだこの問題に直面している場合は、私はいくつかの提案 1を持っている)は、2.0の代わりに、CREATELINKで利用できる新しいリンク・ジェネレータを使用してみてください。別の何もしないかもしれませんが、試してみる価値があります:grailsLinkGenerator.link(mapping: 'helloworld') 2)コントローラー内のリダイレクトの場合は、http://mysite.com部分を自分でpartialUrlに追加するだけです。 3)最後に、正規表現を検索してmysite.com/foobarの内容を置き換えるafterViewに添付されたフィルタを作成します。しかし、これがリダイレクトをキャッチするかどうかはわかりませんが、何かがあれば、フィルタは広いレベルで適用できるので、私はこのことになると思います。

1
def yourAction = { 

     redirect(uri:"helloworld") 

    } 

それはあなたのために働かないのですか?

関連する問題