Pergunta

Na minha Grails controlador Eu estou respondendo a uma chamada de AJAX e usando render para retornar o texto:

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

O problema é que render torna todo o modelo. Então, ao invés de apenas tornando "Nome: John" ele processa todos os ícones, navegação, etc definida no modelo. Como faço para obter render apenas para tornar sem o modelo?

Estou praticamente seguinte Capítulo 1 do "Grails em Ação" (página 28) usando Grails 1.1.1.

Acompanhamento : Retornando falsa por sugestão de Rhysyngsun não tem impacto. Eu também tentou definir o modelo para nulo mas ainda torna o template:

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

render tem seu coração inclinado sobre tornando-o através do modelo não importa o que eu faço.

Acompanhamento 2 : discussão paralela na lista de discussão grails-usuário.

Acompanhamento 3 : Exemplo de código: Eu emparelhado para baixo meu código o mínimo e ainda exibe a prestação template indesejada.

Controladores / PersonController.groovy:

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

    def ajaxTest = { 
        println "ajaxTest called" 
        render text: "ajax message" 
    } 
} 

views / pessoa / home.gsp (Página vista para o método de casa)

<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 (modelo de layout para o controlador pessoa)

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

Eu controlador de acesso pessoa com a visão de casa: http: // localhost: 8080 / test / pessoa / home

a página é processada como: test App chamada ajax (hyperlink) Message = Olá Em branco

"Test App" é a partir do modelo. Quando eu clicar em "chamada ajax" faz uma chamada assíncrona para o método ajaxTest de PersonController (verificado com println). Todos ajaxTest faz é println e processar texto estático. Este resultante da seguinte:

Test App 
ajax call 
Message = Hello 
Test App 
ajax message 

Note que o modelo está sendo processado dentro <p> "test1", que resulta no segundo "Test App".

Estou correndo Grails 1.1.1. Alguma ideia? O código parece simples. Eu baixei a fonte Grails e olhou para RenderDynamicMethod.java. Ele não faz qualquer prestação modelo a menos que modelo está na lista de argumentos, o que não é. Então, meu único palpite é algo acima de vapor está prestando o modelo novamente.

Foi útil?

Solução

Resolvido: Adicionando resultados ContentType no modelo não está sendo processado:

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

Outras dicas

Faça o seu código javascript do lado do cliente pega a responder JSON e tornar a sua resposta com:

render [texto: "Nome: $ {person.name}"] como JSON

Você pode estar se ficar queimado pelo recurso 'layout de-by-convenção' em Grails. Se o seu nome de layout corresponde ao nome do controlador de prefixo, por exemplo, Grails irá aplicar o layout para cada ponto de vista gerido pelo controlador. Infelizmente, mesmo se aplica ao texto e modelos. Atualmente alguns JIRAs logado em relação a este (ver http://jira.grails.org/browse/ grails-7624 por exemplo). Eu fui queimado por isso hoje. Eu resolvi isso, basta renomear o meu gsp layout de tal forma que não corresponde a nenhum nome do controlador. Meu layout foi inicialmente denominada 'storefront.gsp' e eu tenho um controlador chamado StorefrontController. I renomeado o layout para 'public.gsp'.

Descobrimos que retornar explicitamente falsa das correções de ação isto.

Acredito que fazendo tornar foo como JSON retorna false implicitamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top