Grails在gsp页面中设置一个变量,可以通过过滤器找到(之后)

时间:2018-05-11 20:44:23

标签: grails gsp flash-message grails-filters

我正在尝试在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响应的标头。感谢。

0 个答案:

没有答案