2013-10-15 4 views
0

У меня есть приложение grails 2.2.0. Я создал глобальный фильтр и имеет некоторую проверку. если проверка не удалась, она отображает файл статического представления с помощью рендеринга view: viewFileName, заканчивающийся потоком else, возвращает 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

render view: "login", model: param – Sumit

+0

где находится логин? корень? – Alidad

ответ

1

При визуализации страницы и не пересылает его, ваше действие будет вызываться после того, как до прибытия, если вы не возвращаете ложь. Для вашего сценария вы не хотите, чтобы ваше действие вызывалось, поэтому вам нужно вернуть 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

Смежные вопросы