Я пытаюсь установить переменную на странице 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. Спасибо.