所以我正在创建一个应用程序,我想在其中将数据传递给布局以构建内容。因此,当我将数据传递给布局时,我创建了一个过滤器来执行此操作,这个过滤器基本上只查看当前登录的用户,然后进入该帐户,最后查看他们帐户上的所有选项,如图所示以下:
class OptionsFilters {
def springSecurityService
def filters = {
all(controller:'*', action:'*') {
before = {
}
after = { viewModel ->
if(springSecurityService.currentUser != null && springSecurityService.currentUser.acc.options.size() > 0)
{
viewModel.options = springSecurityService.currentUser.acc.options
}
}
afterView = { Exception e ->
}
}
}
}
现在完成了,我有以下代码旨在隐藏该数据,除非用户可以选择查看它:
<g:each var="option" in="${ options }">
<g:if test="${option.name == 'email'}">
//The data to show if they have the option
</g:if>
</g:each>
现在有趣的是,如果用户帐户已经附加了选项(或至少 1 个),则此代码可以正常工作,但是情况是我运行应用程序并且我有一个用户的帐户没有选项,所以对于暂时隐藏布局中的数据。然后,当我进入他们的帐户并添加说“电子邮件”选项并点击保存时,我希望显示正确的显示视图,现在布局中的内容也应该可见。但是,这不是发生的情况,我收到此错误:
Cannot set property 'options' on null object. Stacktrace follows:
Message: Cannot set property 'options' on null object
Line | Method
->> 25 | doCall in tool.OptionsFilters$_closure1_closure2_closure4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
| 918 | run . . in ''
^ 662 | run in java.lang.Thread
从我的测试中,我注意到这个错误似乎只在我更新自己帐户的选项时发生。我认为它在我更新附加到我的用户名的帐户选项和过滤器查看该数据以进行处理之间存在某种时间问题。
我将不胜感激这方面的任何帮助。
提前致谢