将地图传递给Grails JSON视图gson模板无法传递值,一切都为null

时间:2017-01-08 19:46:08

标签: json grails gson

以下行动:

def addMembers(){
    Map result = [message:"successful"]
    try {
        def group = Group.get(params.id)
        def json = request.JSON
        def users = json.users.collect{Usr.get(it.id)}
        result.members = groupService.addMembers(group,users)
    }catch(Exception e){
        message = "Exception $e"
        result.message = message
        response.setStatus(hsr.SC_METHOD_NOT_ALLOWED)
    }
    respond result, [model:[result:result]]
}//eo addMember

与以下addMembers.gson文件结合使用

model {
    Map result
}

json{
    message result.message
    members g.render(template:"simpleMember", collection: result.members, var:'member')
}

获取空指针异常: java.lang.NullPointerException:无法在null对象上获取属性“message”

我在其他行动中工作得很好,我会回复域对象,但如果我捕获异常,客户端需要一条消息,而且当[message:“”成员创建任意pogo时似乎真的不值得。 :[]]可以完成与任意额外文件和额外5-10行代码相同的工作量。

更新1 我尝试使用任意ResultHolder类替换Map,以安抚可能正在进行的任何严格键入。

这没有帮助

更新2 在我的.gson文件中,我替换了

json{ 

json g.render(result){

这使我得到空输出而不是空指针。

同样不可接受。

更新3 为了尝试评估如何与gson模板交互而不依赖于ajax帖子和数据库交互,我做了以下任意操作:

def jsonDbug(){
    def result = [message:"hi"]
    respond result, [model:[jsonDbug:result]]
}

和一个任意的gson文件:

model{
    Map jsonDebug
}

json{
    says jsonDebug.message
}

这使我可以更快地进行更改以查看出现了什么问题。 我正在尝试以其他方式打电话,除了现在回复,但没有任何作用。

就好像JSON视图严格用于域对象而不是其他任何内容。

1 个答案:

答案 0 :(得分:3)

事实证明,当我开始时,我并不是那么遥远。 问题是:

respond result, [model:[result:result]]

http://views.grails.org/latest/

使用的主要示例

当我改为:

render(view:"addMembers", model:[result:result])

它完全符合我的要求。