Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在控制器操作中触摸response.setContentType后,过滤器中不可能出现grails response.addHeader或setHeader_Grails_Grails Filters - Fatal编程技术网

在控制器操作中触摸response.setContentType后,过滤器中不可能出现grails response.addHeader或setHeader

在控制器操作中触摸response.setContentType后,过滤器中不可能出现grails response.addHeader或setHeader,grails,grails-filters,Grails,Grails Filters,在我的控制器操作中,我尝试如下设置响应的contentType class MyController { def rss = { response.setContentType('text/xml') //I even tried setHeader('contentType') and also render(contentType:'text/xml',...) render(template:'/displayRss', model:[:])

在我的控制器操作中,我尝试如下设置响应的contentType

class MyController {
   def rss = {
       response.setContentType('text/xml')
       //I even tried setHeader('contentType') and also render(contentType:'text/xml',...)
       render(template:'/displayRss', model:[:])
   }
}
在过滤器中,我试图为所有控制器和操作参数设置标题

class Filter {
   def filters = {
      all(controller:'*', action:'*'){
         after = { 
            response.setHeader('Cache-Control', 'no-cache')
         }
      }
   }
}
除了修改响应contentType的操作之外,所有其他操作都会添加标头。似乎response.isCommitted()仅在该操作中返回为true。我是否不理解渲染的基本原理

如果我使用渲染(视图:'/abc')而不是视图(模板:'/abc',模型:[:])


提前感谢

看起来渲染模板在调用时会立即发送模板,因为它显示为已在筛选器中提交。由于已经提交了头,因此在事实之后设置头是没有意义的,因此过滤器中的setHeader被忽略

我猜这是渲染模板的一个特殊特性,在这种情况下,您需要在控制器操作中显式设置缓存头,或者使用视图渲染