Iniciante - Formulário GSP para Banco de Dados
11/01/2012 16:24
0
Pessoal, boa tarde.

Estou meio envergonhado de perguntar uma coisa que deve ser muito baba... mas já estou ha 2 dias tentando e não consigo por nada fazer funcionar...

Tenho uma página GSP que renderiza um questionário com
- Nome do questionário
- Perguntas
- Opções de Resposta da Pergunta já tratando se será checkbox, combo ou radio

Queria que ao clicar em "Salvar", os registros selecionados fossem salvos na classe de domínio "QuestioarioAplicado" que eu já tenho

Meu Gsp tá assim:

    <g:form name="myForm" url="[action:'create',controller:'questionarioAplicado']">
<g:each in="${questionarios}" var="questionario">

<h1><g:textField name="questionarios" value="${questionario.nome}"/> </h1>

<g:each in="${questionario.perguntas}" var="pergunta">

<div class="postagem">

<h3>
${pergunta.questao}
</h3>
<h4>
${pergunta.complemento}
</h4>

<ul>

<g:if test="${pergunta.tipo == 'Multipla-Escolha'}">
<g:each in="${pergunta.respostas}" var="resposta">

<g:checkBox name="respostas"/>${resposta.resposta} <br/>
</g:each>
</g:if>


<g:if test="${pergunta.tipo == 'Sim/Não'}">
<g:each in="${pergunta.respostas}" var="resposta">
<g:radio name="respostas" value=""/> ${resposta.resposta}<br/>
</g:each>
</g:if>

<g:if test="${pergunta.tipo == 'Escala 1-10'}">
<g:select name="respostas" from="${pergunta.respostas}"/><br/>
</g:if>

</ul>
</div>

</g:each>

</g:each>
<g:submitButton name="create" value="Enviar Dados"/>
</g:form>


e meu controller está com a action Create dando um println

import grails.plugins.springsecurity.Secured
@Secured(['ROLE_USER'])

class QuestionarioAplicadoController {


def create(){
[println(params)]
//pretendo substituir isso por algo como QuestionarioAplicado.create(params)
//ou será QuestionarioAplicado.save(params)
}
def scaffold = true
}


O resultado do meu println tá resultando em
[respostas:[on, on, on, , 9], questionarios:Aprendendo Grails, _respostas:[, , ], create:Enviar Dados, action:create, controller:questionarioAplicado]


Eu imaginava que teria que vir algo "encadeado"... mais ou menos assim:
[Aprendendo[pergunta1[on,on,off],pergunta2[0,0,0]]


Espero ter sido claro e que vcs possam me ajudar... eu sei que o código está meio bagunçado.. estou fazendo no meu index.gsp mas depois vou fazer tudo por templates.

Obrigadooo!
Tags: formulario, form, create


0
Oi Rafael,

no caso do checkbox, quando não selecionado, ele vem ou como uma string vazia ou como null sempre. É o comportamento default desta tag.

No entanto, o valor pode vir algo diferente de "on" ou "off" ou "". Basta que você inclua o atributo value na tag, tal como no exemplo abaixo:


<g:each in="${lista}" var="bean">
<g:checkBox name="id" value="${bean.id}">Vou retornar o id de ${bean}</g:checkBox>
</g:each>


Neste caso, no seu controlador, quando você executar algo como o código abaixo


def lista_ids = params.list("id")

Você obterá uma lista com os valores que incluiu no atributo name.


0
Henrique,

Obrigado pela atenção!

Mas o "X da questão" não é nem o valor do checkbox passa... acho que meu formulário gsp que deve ter algum erro de montagem... e talvez como eu estou pensando no controlador também não funcione

Eu vi um controlador gerado pelo grails e a action create é basicamente
def create() {[QuestionarioAplicado.create(params)]}

Obs: talvez não seja exatamente assim.. na máquina que estou não tenho grails nesse momento para eu tirar a prova dos 9

Só que eu achei meio confuso o _form.gsp que o create.gsp renderiza (do scaffolding).. e pra piorar eu não achei nenhum exemplo onde uma página gsp sem ser do scaffold criava uma entidade "complexa" no bd...

Quando digo "complexa" é pq minha classe de domínio "QuestionarioAplicado" tem
Um questionário aplicado tem Um ou mais questionários, que possuem uma ou mais perguntas cada, que por usa vez possuem uma ou mais respostas.

Eu achava que o meu form "myForm" fosse passar algo mais parecido com um mapa que eu pudesse informportar no X.create(params) sem ficar fazendo aquele moooooonte de código cheio de

def questionarioAplicado = new QuestionarioAplicado()
def questionario = new Questionario()
def pergunta = new Pergunta()
(...)
criação com os eachs da vida para

questionarioAplicado.addToQuestionario(questionario)
quetionarioAplicado.addToPergunta

questionarioAplicado.save()

Obs: não se atente muito as sintaxes desse post não.. eu estou looooooooonge de conseguir fazer as coisas sem uma colinha rss

Mais uma vez, agradeço pela atençaão dispensada, Henrique!

Abraço!
12/01/2012 17:14


0
Se puder dar uma luz com essa missão, algum link pra ler, algum trecho de um form e um controller... qualquer coisa =)

Obrigado!
12/01/2012 17:17


1
Oi Rafael, da uma olhada neste link.


0
Era iiiiiiiiiiiiisssso!!

Obrigadão, Henrique!!
12/01/2012 17:57


0
Flow man! Precisando, tamo ai!


1
Deu certo!

Achei mais dois posts complementares e vou deixar aqui para outros membros iniciantes...

Vi num blog chamado http://programmingitch.blogspot.com
"Data binding for one to many - Grails"
PARTE 1
PARTE 2
13/01/2012 12:47


0
Massa Rafael!

Te dar uma dica: quando encontrar posts legais assim, você pode postá-los na seção de links do Grails Brasil ok?



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