2013-10-15 41 views
0

我有一個grails 2.2.0應用程序。我創建了一個全局過濾器,並有一些檢查。如果檢查失敗,則使用render view:viewFileName呈現靜態視圖文件,否則返回true,表示應用程序可以繼續。 在登錄操作中,操作呈現調用渲染視圖:loginFileName的登錄視圖,但它會顯示viewFileName。請注意,過濾器傳遞現在已經過去,並且其中的檢查也已通過。 這個問題看起來類似於較早的帖子 Grails "respond" renders the wrong view when launched from .war file 但不同之處在於有兩個同名的索引視圖文件,但在不同的控制器中,但是在這裏我們有過濾器呈現視圖,如果某些條件通過,即使該條件失敗時也會顯示該視圖。 爲了確保這是一個問題,我刪除了呈現過濾器中的渲染視圖:viewFileName,使用渲染「< div> .... </div>」,然後它工作得很好,即動作顯示的是正確的頁面而不是靜態的頁。 如果需要,我可以發佈更多細節。我不能依靠字符串中的頁面進行渲染,因爲這不是長期的。 這裏有兩個班,問題Grails 2.2.0呈現錯誤頁面

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 
       } 
      } 
     } 
    } 
+0

發佈渲染視圖的行。可能是你沒有正確引用視圖。 – Alidad

+0

渲染視圖:「登錄」,型號:param – Sumit

+0

登錄位置在哪裏?根 ? – Alidad

回答

1

當您呈現一個頁面,而不是重定向,您的動作會後的被稱爲前檢查,如果不返回false。對於你的場景,你不希望你的動作被調用,所以你需要在此之後返回false。

def filters = { 
     all(controller: '*', action: '*') { 
      before = { 
       if (AdminUtils.isStart(request)) { 
        println "rending start page...." 
        final fileView = "/$mainControllerName/$startPage" 
        render view: fileView 
        return false 
       } 
      } 
     } 
    } 
+0

謝謝。但是,如問題描述中所述,我確實在條件結束時返回虛假陳述以結束。只是忘了把它放在示例代碼中:P – Sumit

相關問題