私はgrails 2.2.0アプリケーションを持っています。グローバル フィルターを作成しましたが、これにはいくつかのチェックがあります。チェックが失敗した場合は、render view: viewFileName を使用して静的ビュー ファイルをレンダリングし、フローを終了します。それ以外の場合は、アプリが続行できることを示す true を返します。login アクションでは、render view: loginFileName を呼び出すログイン ビューがレンダリングされますが、代わりに viewFileName が表示されます。フィルター パスはすでに通過しており、そのチェックインも通過していることに注意してください。この問題は、以前の記事「Grails "respond" renders the wrong view when launched from .war file」に似ているよう です ただし、違いは、同じ名前の 2 つのインデックス ビュー ファイルが別のコントローラーにあることですが、ここでは、条件が満たされていない場合でも表示されるビューをレンダリングするフィルターがあります。これが問題であることを確認するために、render view: viewFileName in filter with render "< div>....< /div >" を削除すると、すべてうまく機能しました。つまり、アクションは静的ページではなく適切なページを表示しました. 必要に応じて詳細を投稿できます。文字列に含まれるそのページをレンダリングすることに頼ることはできません。それは長期的ではないからです。問題のある2つのクラスは次のとおりです
class MainController {
def login() {
def param = getHeaderParameters()
render view: "login", model: param
}
}
class MainFilters {
private final String mainControllerName = "main"
private final String startPage = "start"
def GrailsConventionGroovyPageLocator groovyPageLocator
def filters = {
all(controller: '*', action: '*') {
before = {
if (AdminUtils.isStart(request)) {
println "rending start page...."
final fileView = "/$mainControllerName/$startPage"
render view: fileView
}
}
}
}