在 Controller 中执行以下操作:

def listBlockedMembers() {
    def blocked = UserBlock.findAllByUser(springSecurityService.currentUser)

    render(view:'listBlockedMembers', model:[blocked:blocked])
}

在我的集成测试中,模型和 View 工作正常:
def blocked = controller.modelAndView.model['blocked']
assertEquals 2, blocked.size()

但是如果我通过这样的 Action 传递模型:
def listBlockedMembers() {
    def blocked = UserBlock.findAllByUser(springSecurityService.currentUser)
    [blocked:blocked]
}

我收到访问controller.modelAndView的空指针异常(modelAndView属性本身上的空指针)

我的集成测试扩展了GroovyTestCase。虽然第一个 Action 有效,但第二个 Action 所需的代码更少,我不知道为什么会发生空指针异常。在开发中,两个 Action 的gsp呈现相同。

最佳答案

实际上有一个Grails bug,它与两个返回类型的处理方式不同:



因此,看起来像在返回 map 时,将其视为常规方法(并处理返回的值)可能比调用controller.modelAndView更好。例如:

Map response = controller.listBlockedMembers()
assert response.blocked

09-12 11:07