Formularios e Params
06/04/2013 21:34
0
Estou dando um render as JSON no meu controlador e estou tendo a seguinte saida:


{
dataEntrevista: "2013-04-07",
[color=red]resposta1.descricao: "outra justificativa lalala",[/color]
resposta1: {
[color=red]descricao: "outra justificativa lalala",[/color]
[color=orange]id: "2"[/color]
},
resposta0.id: "1",
resposta0: {
descricao: "justificativa blablabla",
id: "1"
},
[color=purple]resposta2.descricao: "justificativa de uma outra pergunta",[/color]
resposta2: {
[color=purple]descricao: "justificativa de uma outra pergunta",[/color]
[color=green]id: "3"[/color]
},
resposta0.descricao: "justificativa blablabla",
resposta3.id: "4",
resposta3: {
id: "4",
descricao: "da outra pergunta e alternativa"
},
entrevistado: "",
pesquisador: "",
resposta3.descricao: "da outra pergunta e alternativa",
[color=green]resposta2.id: "3",[/color]
[color=orange]resposta1.id: "2",[/color]
create: "Create",
action: "postar",
controller: "entrevista"
}


Eh normal essa duplicidade no params que destaquei? imaginei que soh viria o encadeado.

Estou fazendo besteira neh?

antes estava fazendo
<input name="pergunta[${p}].alternativa[${a}].id.../>
<input name="pergunta[${p}].alternativa[${a}].justificativa .../>


Mas estava dando o mesmo.

Alguem da um help?

Obrigado

Tags: formulario hasMany


0
Opa, sim: é isto o que ocorre quando um formulário é submetido no qual um campo aparece mais de uma vez com o mesmo nome.


0
E esse eh o melhor jeito?

Queria iterar apenas nos
RespostaN{
id:X
Justificativa: 'blablabla'
}

Criando e salvando uma ou mais Resposta

Eu tinha tentado fazer um findAll nos params, selecionado o q comecava com resposta, mas alem dos mapas ele estava trazendo os individuais tambem.

Tem alguma dica?

Obrigado
07/04/2013 16:05


0
Oi Rafael,

para situações como a sua, em que um campo se repete no formulário, é a única maneira que conheço de trabalhar.

Na realidade, você não precisa de ficar mudando os nomes dos seus campos no formulário. Se você chamasse todos de resposta, poderia iterar em cima do seu controlador tal como neste exemplo aqui olha:


def camposResposta = params.list('resposta')


No caso, a ordem em que eles aparecem na página irá ser refletida no modo como serão tratados pelo seu controlador.

Então, você não precisa fazer algo como no trecho abaixo:


<g:each in="${respostas}" var="resposta" status="i">
(...)
<input type="text" name="resposta_${i}"/>
</g:each>


Pode fazer assim olha:


<g:each in="${respostas}" var="resposta">
<input type="text" name="resposta"/>
</g:each>




0
Olá, Henrique.

Eu estava usando uma solução muito semelhante a sua - quando precisava apenas receber uma lista de ids que representavam as respostas, de forma que no meu controler eu recebia:


respostas = [1,2,3,6,8,9]


Conseguia iterar e salvar belezinha..

O "Problema" é que agora eu preciso receber, além do ID, uma Justificativa (String) para aquela resposta.

Foi por causa disso que eu pensei em fazer

resposta_0.id = 1
resposta_0.justificativa = "minha justificativa para essa resposta"

resposta_1.id = 4
resposta_1.justificativa = "blablablablalbalba"

(...)


Achei que seria fácil iterar, mas estou apanhando.

Através da sua solução, eu conseguiria receber dois (ou mais) atributos para cada resposta?

Mais uma vez, obrigado!
08/04/2013 14:58



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto