在控制器中给出此操作:
def listBlockedMembers() {
def blocked = UserBlock.findAllByUser(springSecurityService.currentUser)
render(view:'listBlockedMembers', model:[blocked:blocked])
}
在我的集成测试中,模型和视图工作正常:
def blocked = controller.modelAndView.model['blocked']
assertEquals 2, blocked.size()
但是如果我从这样的动作中传递模型:
def listBlockedMembers() {
def blocked = UserBlock.findAllByUser(springSecurityService.currentUser)
[blocked:blocked]
}
我得到一个空指针异常,访问controller.modelAndView
(modelAndView属性本身的空指针)
我的集成测试扩展了GroovyTestCase
。虽然第一个动作有效,但第二个动作更少,我想知道为什么会出现空指针异常。在开发过程中,gsp为两个动作呈现相同的内容。
答案 0 :(得分:0)
实际上这是一个Grails bug,它与处理两种不同的返回类型有关:
这里讨论了两种情况。一种情况是控制器中的方法返回Map,另一种情况是控制器中的方法不返回Map。对于方法不返回Map的情况,为了讨论起见,我们讨论的是调用render方法的方法。
因此,在返回地图时,将其视为常规方法(并处理返回的值)可能比调用controller.modelAndView
更好。例如:
Map response = controller.listBlockedMembers()
assert response.blocked