Grails从域列表奇怪的行为渲染JSON

时间:2013-02-13 21:28:25

标签: json grails

我正在尝试从控制器操作返回JSON。这是我的行动方法

import grails.converters.JSON
....    
def getDoctorList(id){

    def serviceNo = id ?: "1"


    def service = ServicePoint.findByNumber(serviceNo)

    def jsonMap=service?.staff.collect{
         [id: it.id , name: it.firstName +" "+ it.lastName]             
    }

    render jsonMap as JSON

   }

如果我在最后一行将jsonMap转换为JSON,我的页面将不会被呈现,如果我删除了JSON页面呈现并且一切正常。这段代码有什么问题?

=============================================== ==================================

我不需要渲染一个gsp页面,我需要将地图渲染为json,以便在填充gsp页面中的下拉框时使用它。现在,当我在代码中使用(作为JSON)时,不会显示由ajax呈现的页面。如果我删除它一切正常。

2 个答案:

答案 0 :(得分:1)

通过渲染JSON,您无法渲染与该操作关联的模板。如果我假设约定并且你有一个getDoctorList.gsp,那么下面的代码将起作用:

def getDoctorList(id){
 //.. logic here
 // leaving no render method will default to convention
 // rendering getDoctorList.gsp
}

def getDoctorList(id){
 //.. logic here
 // supplying a render with a view will render that view
 render view: 'doctor_list' // assumes doctor_list.gsp
}

def getDoctorList(id){
 //.. logic here
 // Rendering JSON will not use a template at all
 render jsonMap as JSON
}

这可行,但我怀疑这是你想要的:

def getDoctorList(id){
 //.. logic here
 [jsonMap: jsonMap as JSON]
}

这会将jsonMap作为请求参数推送到getDoctorList.gsp。一般来说,渲染JSON数据通常是对ajax请求的响应。

答案 1 :(得分:0)

不是render jsonMap as JSON,而是return jsonMap as JSON。在第一种情况下,您在text/html标题中返回Content-typereturn Grails将其设置为application/json