Grails «render» рендерит шаблон
В моем контроллере Grails я отвечаю на вызов AJAX и используюrender
вернуть текст:
def ajaxRandomPersonName = {
def person = get a random person ...
render "Name: ${person.name}"
}
Проблема в том, чтоrender
отображает весь шаблон Таким образом, вместо рендеринга «Имя: Джон» он отображает все значки, навигацию и т. Д., Определенные в шаблоне. Как я могу получитьrender
просто сделать без шаблона?
Я в значительной степени следую главе 1 «Grails в действии» (стр. 28), используя Grails 1.1.1.
Следовать за: Возврат false за предложение Rhysyngsun не оказывает никакого влияния. Я также попытался установить для шаблона значение 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: // локальный: 8080 / тест / человек / дома
страница отображается следующим образом: ajax-вызов приложения Test (гиперссылка) Message = Hello Blank
«Тестовое приложение» из шаблона. Когда я нажимаю «ajax call», он выполняет асинхронный вызов метода ajaxTest PersonController (проверяется с помощью println). Все, что делает ajaxTest - это println и визуализирует статический текст. Этот результат в следующем:
Test App
ajax call
Message = Hello
Test App
ajax message
Обратите внимание, что шаблон отображается в «test1»<p>
что приводит ко второму «Тестовое приложение».
Я бегу Grails 1.1.1. Есть идеи? Код кажется простым. Я скачал исходники Grails и посмотрел на RenderDynamicMethod.java. Это не делает никакого рендеринга шаблона, если шаблон не находится в списке аргументов, который это не делает. Так что мое единственное предположение, что что-то в самом разгаре - это рендерить шаблон снова