在我的 Grails 控制器中,我正在响应 AJAX 调用并render
用于返回文本:
def ajaxRandomPersonName = {
def person = get a random person ...
render "Name: ${person.name}"
}
问题是render
渲染整个模板。因此,它不仅呈现“姓名:约翰”,还呈现模板中定义的所有图标、导航等。如何在render
没有模板的情况下进行渲染?
我非常关注使用 Grails 1.1.1 的“Grails in Action”(第 28 页)的第 1 章。
跟进:根据 Rhysyngsun 的建议返回 false 没有影响。我也尝试将模板设置为 null 但它仍然呈现模板:
def ajaxRandomPersonName = {
def person = get a random person ...
render (template:null, text:"Name: ${person.name}")
}
render
无论我做什么,它都会一心一意通过模板渲染它。
跟进 2:关于 grails-user 邮件列表的并行讨论。
跟进 3:示例代码:我将代码配对到最低限度,但它仍然表现出不希望的模板渲染。
控制器/PersonController.groovy:
class PersonController {
def index = { }
def home = { [message:"Hello"] }
def ajaxTest = {
println "ajaxTest called"
render text: "ajax message"
}
}
views/person/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>
views/layouts/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
页面呈现为:Test App ajax call (hyperlink) Message = Hello Blank
“测试应用程序”来自模板。当我单击“ajax 调用”时,它会异步调用 PersonController 的 ajaxTest 方法(使用 println 验证)。ajaxTest 所做的只是 println 并呈现静态文本。结果如下:
Test App
ajax call
Message = Hello
Test App
ajax message
请注意,模板正在“test1”中呈现,<p>
这会导致第二个“Test App”。
我正在运行 Grails 1.1.1。有任何想法吗?代码看起来很简单。我下载了 Grails 源代码并查看了 RenderDynamicMethod.java。除非模板在参数列表中,否则它不会进行任何模板渲染,但它不是。所以我唯一的猜测是再次渲染模板。