我正在尝试在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
这里有一点背景,因为您可能会看到更好的方法。我们继承了一个圣杯项目,其中已经生成了一些静态脚手架页面,并且已经尝试锁定该页面。如果用户不是管理员,我们会显示上面显示的警告,否则我们将显示脚手架代码定义的域对象:
<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响应的标头。感谢。