Grails的“渲染”渲染模板

Grails的“渲染”渲染模板

问题描述:

在我的Grails控制器我响应AJAX调用和使用render返回文本:Grails的“渲染”渲染模板

def ajaxRandomPersonName = { 
    def person = get a random person ... 
    render "Name: ${person.name}" 
} 

的问题是,render使得整个模板。因此,不是仅呈现“名称:约翰”,而是呈现模板中定义的所有图标,导航等。我如何才能让render仅使用模板进行渲染?

我非常喜欢使用Grails 1.1.1的“Grails in Action”(第28页)第1章。

跟进: 根据Rhysyngsun的建议返回错误没有影响。我也试过设置模板为空,但它仍然呈现模板:

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

render有心脏一心使其通过模板,无论我做什么。

后续2Parallel discussion关于grails-user邮件列表。

跟进3:示例代码: 我配对了我的最低代码,它仍然表现出不想要的模板呈现。

控制器/ PersonController.groovy:

​​

的意见/人/ home.gsp(家庭法视图页)

<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> 

的意见/布局/ person.gsp(用于个人布局模板控制器)

<html> 
<head> 
    <title>Test App - <g:layoutTitle/></title> 
    <g:layoutHead/> 
</head> 
<body> 
    <h1>Test App</h1> 
    <g:layoutBody/> 
</body> 
</html> 

我访问的人控制器,主视图: http://localhost:8080/test/person/home

页面呈现为: 测试应用程序 Ajax调用链接(hyperlink) 消息=你好 空白

“测试应用程序” 是从模板。当我点击“ajax call”时,它会对PersonController的ajaxTest方法(使用println进行验证)进行异步调用。所有ajaxTest都是println并呈现静态文本。这个结果在下面:

Test App 
ajax call 
Message = Hello 
Test App 
ajax message 

注意模板被“测试1” <p>导致第二个“测试应用程序”中呈现。

我正在运行Grails 1.1.1。有任何想法吗?代码看起来很直接。我下载了Grails源代码并查看了RenderDynamicMethod.java。它不会进行任何模板渲染,除非模板在参数列表中,否则不会。所以我唯一的猜测就是蒸汽正在渲染模板。

解决:添加的contentType会导致无法呈现模板:

render text: "Name: ${person.name}", contentType: "text/plain" 
+1

你是怎么知道这件事的? – 2010-01-14 20:59:30

+4

是的,请详细说明您在哪里找到答案。另一方面,第1章本应花费我30分钟,花了我数小时才完成,这真是令人遗憾。而且,我对第一次刺伤Grails感到非常失望 – 2011-09-17 15:56:19

我们发现显式地从动作返回false修复了这个问题。

我相信做渲染foo作为JSON隐式返回false。

+0

我只是尝试渲染后返回false,它仍然呈现模板。 – 2009-09-23 15:58:05

让您的客户端的JavaScript代码处理JSON响应,并呈现与您的回应:

渲染[文: “姓名:$ {} person.name”]作为 JSON

你可能会得到由“布局按约定”功能烧毁在Grails中。例如,如果您的布局名称与控制器名称前缀匹配,则Grails会将布局应用于该控制器管理的每个视图。不幸的是,它甚至适用于文本和模板。目前有几个JIRA记录在案(例如见http://jira.grails.org/browse/GRAILS-7624)。 今天我被烧了。我解决了它,只需重命名我的布局gsp,使其不匹配任何控制器名称。我的布局最初名为'storefront.gsp',我有一个名为StorefrontController的控制器。我将布局重命名为'public.gsp'。