2013-10-15 39 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

相关问题