Arv*_*ind 6 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:[:])
}
}
Run Code Online (Sandbox Code Playgroud)
在过滤器中,我试图为所有控制器和动作参数设置标题
class Filter {
def filters = {
all(controller:'*', action:'*'){
after = {
response.setHeader('Cache-Control', 'no-cache')
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
除了修改响应contentType的操作之外,为所有其他操作添加了标头.似乎response.isCommitted()仅在该操作中返回true.我不理解渲染的基础......?
如果我使用render(view:'/ abc')而不是view(template:'/ abc',model:[:])也不是这种情况
提前致谢
小智 1
看起来渲染模板在调用时会立即发送模板,因为它显示为已在过滤器中提交。由于它已提交,标头已被发送,并且事后设置标头没有意义,因此过滤器中的 setHeader 被忽略。
我的猜测是,这是渲染模板的特殊性,在这些情况下,您需要在控制器操作中显式设置缓存标头,或者使用视图渲染。
| 归档时间: |
|
| 查看次数: |
2449 次 |
| 最近记录: |