Grails"render"呈现模板

Ste*_*Kuo 10 grails gsp

在我的Grails控制器中,我正在响应一个AJAX调用并使用render返回文本:

def ajaxRandomPersonName = {
    def person = get a random person ...
    render "Name: ${person.name}"
}
Run Code Online (Sandbox Code Playgroud)

问题是render呈现整个模板.因此,它不是仅渲染"Name:John",而是呈现模板中定义的所有图标,导航等.如何在render没有模板的情况下进行渲染?

我几乎使用Grails 1.1.1来关注"Grails in Action"(第28页)的第1章.

跟进:根据Rhysyngsun的建议返回错误没有影响.我也尝试将模板设置为null但它仍然呈现模板:

def ajaxRandomPersonName = {
    def person = get a random person ...
    render (template:null, text:"Name: ${person.name}")
}
Run Code Online (Sandbox Code Playgroud)

render 无论我做什么,都会全心全意地通过模板渲染它.

后续2:关于grails-user邮件列表的并行讨论.

后续3:示例代码:我将我的代码配对最低限度,它仍然展示了不需要的模板渲染.

控制器/ PersonController.groovy:

class PersonController { 
    def index = { } 
    def home = { [message:"Hello"] } 

    def ajaxTest = { 
        println "ajaxTest called" 
        render text: "ajax message" 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

views/person/home.gsp(home方法的查看页面)

<html> 
<head> 
    <title>Home View</title> 
    <g:javascript library="prototype" /> 
</head> 
<body> 
    <p> 
        <g:remoteLink action="ajaxTest" update="test1">ajax call</g:remoteLink> 
    </p> 
    <p>Message = ${message}</p> 
    <p id="test1">Blank</p> 
</body> 
</html> 
Run Code Online (Sandbox Code Playgroud)

views/layouts/person.gsp(人员控制器的布局模板)

<html> 
<head> 
    <title>Test App - <g:layoutTitle/></title> 
    <g:layoutHead/> 
</head> 
<body> 
    <h1>Test App</h1> 
    <g:layoutBody/> 
</body> 
</html> 
Run Code Online (Sandbox Code Playgroud)

我使用主视图访问人员控制器: http:// localhost:8080/test/person/home

该页面呈现为:Test App ajax call(超链接)Message = Hello Blank

"测试应用程序"来自模板.当我单击"ajax call"时,它会对PersonController的ajaxTest方法进行异步调用(使用println验证).所有ajaxTest都是println并呈现静态文本.结果如下:

Test App 
ajax call 
Message = Hello 
Test App 
ajax message 
Run Code Online (Sandbox Code Playgroud)

请注意,模板正在"test1"中呈现,<p>这导致第二个"测试应用程序".

我正在运行Grails 1.1.1.有任何想法吗?代码似乎很简单.我下载了Grails源代码并查看了RenderDynamicMethod.java.除非模板位于参数列表中,否则它不会执行任何模板渲染.所以我唯一的猜测是蒸汽再次呈现模板.

Ste*_*Kuo 13

已解决:添加contentType会导致模板未呈现:

render text: "Name: ${person.name}", contentType: "text/plain"
Run Code Online (Sandbox Code Playgroud)

  • 是的,请详细说明您在哪里找到了这个答案.另一方面,第1章应该花了我30分钟,这是一个绝对的耻辱,花了我几个小时才完成.而且,我对Grails的第一次刺伤感到非常失望 (4认同)