在我的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)