Vraptor + input type radio (submeter form)

Prezados,

Estou precisando submeter um formulário que seria as respostas de um questionário.

Um questionário possui uma lista de questões e cada questão uma lista de alternativas.
Para eu poder trabalhar com o radio (e apenas uma seleção de alternativa), o nome do radio deve ser igual.
Normalmente eu faria assim:

[code]#foreach( $alternativa in $!alternativas )

  • $!alternativa.descricao
  • #end[/code]

    O que seria rederizado na tela como:

    [code]

  • I
  • II
  • III
  • Todas as alternativas anteriores
  • [/code]

    Mas trabalhando com vraptor, esta seria a melhor maneira de trabalhar?

    como eu pegaria esses valores no método do controller?

    Acho que esse link tem o que você precisa: http://www.guj.com.br/java/218677-checkbox-checados-no-vraptor e esse: http://www.guj.com.br/java/144920-vraptor-pegar-valor-dos-checkbox-checados

    Apesar dos dois exemplos serem para checkbox, o mesmo vale para radio.

    [quote=davisnog]Acho que esse link tem o que você precisa: http://www.guj.com.br/java/218677-checkbox-checados-no-vraptor e esse: http://www.guj.com.br/java/144920-vraptor-pegar-valor-dos-checkbox-checados

    Apesar dos dois exemplos serem para checkbox, o mesmo vale para radio.[/quote]

    @davisnog,

    Dei uma olhada nos links, mas isso não resolve para o meu problema específico. Se eu deixar a lista de radio (ou checkbox) com o mesmo nome, o usuário só poderá escolher uma alternativa para todo o questionario. Meu problema não é trabalhar como checkbox, mas sim receber ‘diferentes’ radios (que possuem diferentes e dinamicos names) no Controller…

    Alguma sugestão?

    o que vai pro controller é o value do radio checkado. Pro controller tanto faz se for:

    <input type="hidden" name="abc" value="123"/>
    ou
    <input type="text" name="abc" value="123"/>
    ou
    <input type="radio" name="abc" value="123"/> //checkado
    ou
    <input type="checkbox" name="abc" value="123"/> //checkado
    ou
    <input type="submit" name="abc" value="123"/> //clicado

    em todos esses casos vc recebe no controller como String abc ou algo do tipo.

    só lembre-se que um radio só está ligado a outro se tiver o mesmo nome. Ou seja, se vc quer que se marcar um desmarque os outros, todos tem que ter o mesmo name

    [quote=Lucas Cavalcanti]em todos esses casos vc recebe no controller como String abc ou algo do tipo.

    só lembre-se que um radio só está ligado a outro se tiver o mesmo nome. Ou seja, se vc quer que se marcar um desmarque os outros, todos tem que ter o mesmo name[/quote]

    oi Lucas,

    A questão é justamente essa… eu sei que no controller tenho que receber a String abc, ou o objeto que eu quiser desde que o name esteja igual a assinatura do metodo no controller.

    O problema é que eu tenho X questões e cada questão Y alternativas. O usuario pode marcar uma apenas alternativa por questão.
    Se eu colocar todos os names iguais pra receber essa lista no controller, ele só vai conseguir responder uma questao em todo o questionario.
    se eu colocar os names diferentes para cada questão, como vou receber esses names no controller já que eles são dinamicos?

    [code]#foreach( $alternativa in $!alternativas )

  • $!alternativa.descricao
  • #end [/code]

    [code]

  • I
  • II
  • III
  • Todas as alternativas anteriores
  • [/code]

    vc pode usar a notação de colchetes para isso…

    como vc precisa ligar à questão respondida, sugiro que vc faça algo do tipo:

    <input type="hidden" name="questao[0].id" value="$!questao.id"/>
    
    #foreach( $alternativa in $!alternativas )  
    <li><input type="radio" value="$!alternativa.id" name="questao[0].resposta">$!alternativa.descricao</li>  
    #end  

    o importante é que o índice do hidden seja o mesmo que o das alternativas, mas vc precisa mudar o índice para cada questão (não precisa ser sequencial, vc pode usar questao.id como índice, embora sequencial seja um pouco mais performático)

    daí do lado do servidor vc recebe uma List ou outro objeto que tenha o id da questao e o id da resposta como atributos (com setters)

    Blz, agora funfou! Valeu lucas