我的 UrlMapings 中有一个“500”错误的映射,它呈现一个自定义错误页面并且它工作正常,除非异常发生在自定义 taglib 实现中或部分通过 g:include 包含。
如果发生这种情况,错误页面将作为环绕布局的一部分呈现在有问题的标签或 g:include 所在的位置。
我知道这是一种预期的行为,但是有没有办法强制此类错误导致重定向或在父布局之外呈现错误页面,而不是以包含部分呈现内容和多个错误页面部分的页面结束?
我的 UrlMapings 中有一个“500”错误的映射,它呈现一个自定义错误页面并且它工作正常,除非异常发生在自定义 taglib 实现中或部分通过 g:include 包含。
如果发生这种情况,错误页面将作为环绕布局的一部分呈现在有问题的标签或 g:include 所在的位置。
我知道这是一种预期的行为,但是有没有办法强制此类错误导致重定向或在父布局之外呈现错误页面,而不是以包含部分呈现内容和多个错误页面部分的页面结束?
我通常在应用程序之外解决这个问题:在生产中,我通常在我的 tomcat 前面有一个 nginx。这将拦截所有在标头中有 500 http 代码的页面,并显示一个静态错误页面:
server {
[..]
location / {
proxy_pass http://localhost:8080/grailsAppName;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/errors-grailsAppName;
}
}
这样,子视图是否损坏或操作代码本身都没有关系。
我认为您无法实现您想要做的事情,但至少您可以使用 try /catch 将您的代码片段包围在 taglib 中,并使用空字符串或特定消息进行渲染。