Grails渲染模板还是JSON?

时间:2014-06-24 14:29:42

标签: json grails

我有一个上传和处理文件的控制器。之后,我希望将处理结果呈现为模态div。我想知道将控制器的结果传递给gsp上的模态div的最佳方法是什么。我想到了一个模板,但我不知道如何指定模板的目标div应该是什么,因为这个模板不会通过按钮单击来呈现,其中模板渲染的目标被设置为属性,它将在定时的基础上完成(即文件上传完成时)。另一种方法是从控制器发回JSON,但我不知道如何在正确的时间拦截这个JSON,因为我还不太了解GSP和Controller之间信息流的时间。我知道如何发送JSON,但是如何向GSP发出警告,嘿,现在有些JSON已经准备好迎接即将升级的模式。"这里有一些基本上是我想要完成的pseoducode。

控制器:

 upload() {
    // process file and store results in three integers
    // int1 = result1
    // int2 = result2
    // int3 = result3
    // send the three numbers to the gsp
    }

现在将这三个数字输入GSP的最佳方法是什么,以便它们显示在一个模态对话框中,该对话框将会像这样:

<div id="fileUploadResultsModal">
Results:
${int1}, ${int2}, ${int3}
</div>

这是与我的ajax上传功能相关联的JS:

$("#chseFile").upload("${createLink(controller: 'customer', action: 'upload',)}",
                                            {dataTypegrp: parseInt(getCheckedValue(document.getElementsByName('dataTypegrp'))),
                                             fileTypegrp: parseInt(getCheckedValue(document.getElementsByName('fileTypegrp')))}, 
                                            function(success) {
                                                    $("#cancel1").trigger("click");
                                                    setTimeout(function(){ 
                                                        $("#summary").trigger("click");
                                                    }, 250);
                                                    displaySuccess(data);
                                            }, 
                                            function(prog, value) {
                                                console.log(value);
                                                $("#prog").val(value);
                                                if (value == 100) {
                                                    $("#prog").hide();
                                                    $("#progressbar").html("Uploading and processing. Please wait...");
                                                }
});

但是现在JS抱怨说&#39;数据&#39;没有定义。 &#39;数据&#39;意味着是从控制器回来的JSON。

由于

2 个答案:

答案 0 :(得分:3)

你可以将它们渲染为JSON:

render( [ int1:111, int2:222, int3:333 ] as JSON )

或作为HTML字符串

render "<div id=\"fileUploadResultsModal\">Results:${int1}, ${int2}, ${int3}</div>"

或使用模板

render template:'/yourController/templateName', model:[ int1:111, int2:222, int3:333 ]

TagLib

render g.yourResultTag( int1:111, int2:222, int3:333 )

对于这一小部分信息,性能并不值得关注。这相当于品味,或者更适合您的客户。

如果后者是JSON偏向的,请使用JSON渲染。如果它混合使用JSON和HTML,请使用其他。

答案 1 :(得分:0)

控制器动作的enf控制器内部可以使用

(function(){
   console.log('holla at world');
})() 

这会将数据呈现给GSP