Grails устанавливает переменную на странице gsp, которая может быть найдена фильтром (после) - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь установить переменную на странице gsp, которую можно найти с помощью фильтра Grails, который я настроил (после действия). Я пробовал следующее:

_adminWarning.gsp
    <div class="warning">
        <g:set var="errorCode" value="403" scope="flash"/>
        <h1>You are not an authorized administrator. Please contact ...</h1>
     </div>

MyFilter.groovy

...
    def filters = {
       addHeader(controller:'capability',action:'*') {
          before = {}
          after = { Map model ->
             // def xxx = flash.findAll{ item -> item.length() > 0}
             def errCode = flash.find{ it.Key == "errorCode" } ?.value
             ...
          }
         afterView = {Exception e -> }
     }

Похоже, что содержимое флэш-памяти пусто, и я пытаюсь выяснить, что я делаю неправильно. Мы используем Grails 2.4.0

Небольшая предыстория, так как вы можете увидеть лучший способ сделать это. Мы унаследовали проект grail, в результате которого были сгенерированы некоторые статические страницы лесов, и была предпринята попытка заблокировать эту страницу. если бы пользователь не был администратором, мы бы отобразили предупреждение, показанное выше, в противном случае мы отобразим объект домена, как определено кодом скаффолдинга:

<g:set var="admin" 
        value="${...MyController.isAdmin(...myService.loggedInUser())}"/>
 <g:if test="${admin==false}"/g>
     <g:render template="../layout/adminWarning"/g>
 </g:if>
 <g:else>
    // ...Continuation of scaffolding code to display a domain object
 </g:else>

Единственная проблема здесь в том, что код состояния - «200», и нам нужно, чтобы код состояния был установлен на «403». В идеале мне бы очень хотелось провести этот тест в контроллере, но в некоторых случаях у нас не определен контроллер (код скаффолдинга). Итак, суть проблемы в том, как установить переменную на странице gsp, чтобы фильтр мог легко определить, как установить заголовок, который будет содержать ответ 403. Спасибо.

...