Dúvida com checkbox

9 respostas
J

Tenho um formulário JSP com um checkbox. Porém o id de cada item do checkbox deve ser armazenado em linhas diferente da tabela do meu banco. Então, se eu marcar 15 itens desse checkbox, deve ser gerada 15 linhas no banco para armazenar esses id’s. Gostaria de saber como faço isso.

Eis o checkbox:

<tr>
		      <td height="30" align="right" class="tabelaFonte"></td>
		      <td height="30" class="tabelaFonte">
                          <p> <span >
        <c:forEach var="servicosDimat" items="${servicosdimats}">
                                  <input type="checkbox" name="intermediaria.inteFkServicoDimatId.smatPkId"
                                         value="${servicosDimat.smatPkId}" />${servicosDimat.smatNome}<br />
                            </c:forEach><br/>
                            <span ><span class="radioRequiredMsg">Por favor, marque os serviços.</span></span> </span>
		      </p></td>
		    </tr>

9 Respostas

visola

Se estiver recebendo os dados num servlet, pode usar o método getParameterValues que retorna uma string com o valor de todos os parâmetros que foram passados. No seu caso, seu formulário (suponho que isto esteja dentro de um formulário) já está correto. Todos os valores (os ids) para o servidor com o mesmo nome: intermediaria.inteFkServicoDimatId.smatPkId. Então é só você pegá-los e fazer o que precisa:

String [] ids = request.getParameterValues("intermediaria.inteFkServicoDimatId.smatPkId");
for (String id : ids) {
    // Faz o que você precisa aqui
}
J
@Post @Path("/intermediariaServicosDimat/adiciona")
        String [] ids = request.getParameterValues("intermediaria.inteFkServicoDimatId.smatPkId");  
        for (String id : ids) {  
             // Faz o que você precisa aqui  
             public void adicionaServicosDimat(Intermediaria intermediaria) throws Exception{
                       validator.addAll(Hibernate.validate(intermediaria));
                       validator.onErrorUse(page()).of(IntermediariaDimatController.class).formulario();
                       dao.salva(intermediaria);
                       result.redirectTo(SolicitacaoController.class).servicosDimat();
              }
        }

Olá visola. Estou usando VRaptor. Queria saber se onde tem “Faz o que precisa aqui” seria o método (acima) para salvar que está implementado na controller. Segue o link da img do formulário para vc ter uma idéia de como é.

http://lh4.ggpht.com/_nTzBoYSeT2I/TTh0AnHdpGI/AAAAAAAAESQ/peFfDZA9kaY/s1152/Captura_de_tela.png

Obrigado!

J

Este teste cadastra no banco valores pre-estabelecidos, preciso pegar esses valores do form, como eu faço isso !?

*import br.com.catequese.to.Solicitacao;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
public class teste {
    private static SessionFactory factory;
    private static Session session;

 public static void main(String[] args) throws Exception{
 
     // abri uma sessão hibernate
     session = factory.openSession();
     //inicia uma transação
     Transaction tx = session.beginTransaction();
     //instancia a solicitação
     Solicitacao a = new Solicitacao();

     a.setSoliPkId(1);
     a.setSoliDataSolicitacao(new Date());
     a.setSoliDataFinalizacao(new Date());
     a.setSoliDataDesativacao(new Date());
     a.setSoliMotivoCancelamento("wdaw");
     a.setSoliDataContato(new Date());
     a.setSoliDataAtendimento(new Date());
     a.setSoliNegociacao("aqwdd");
     a.setSoliStatus("A");
     a.setSoliStatusSolicitacaoNome("adw");
     a.setSoliStatusSolicitacaoCod("adw");
     a.setSoliStatusSolicitacaoLocal("adw");
  
    session.save(a);
    System.out.printf("=====================salvou o satanas================================2");
    tx.commit();

 }

 static {
 AnnotationConfiguration cfg = new AnnotationConfiguration();
 cfg.configure();
 factory = cfg.buildSessionFactory();
 }

 public Session getSession() {
 return factory.openSession();
 }
}
visola

Bom, nunca usei o VRaptor então não vou poder te ajudar com isso.
O que está errado é a declaração do método dentro do for. Você tem que declará-lo fora do método do controller.
Não entendi direito o que o seu código faz. Você está usando o validador do Hibernate, é isso?
Você precisa da entidade inteira para salvar no banco. Então, antes de salvar, vai ter que carregá-la (usando o load do seu DAO por exemplo) através do ID que recebeu.
Se você está colocando os dados num entidade que será salva no banco (suponho que seja esta “intermediaria”), você precisa carregar cada um dos “serviços” e adicionar nela. Depois validar e salvar.
Então, acho que o melhor é você criar a entidade intermediaria antes do for, carregar e adicionar os serviços dentro do for e executar o seu método que valida e salva depois do for.
Espero que isso tenha ajudado.

J

Ah entendi, obrigado pela ajuda. Estou mesmo usando o validador do hibernate e minha entidade é a Intermediária também.

R

Ola,

em sua view testa isso

&lt;tr&gt; &lt;td height="30" align="right" class="tabelaFonte"&gt;&lt;/td&gt; &lt;td height="30" class="tabelaFonte"&gt; <p> &lt;span &gt; &lt;c:forEach var="servicosDimat" items="${servicosdimats}" varStatus = "i"&gt; &lt;input type="checkbox" name="intermediariaList[${i.index}].inteFkServicoDimatId.smatPkId" value="${servicosDimat.smatPkId}" /&gt;${servicosDimat.smatNome}<br /> &lt;/c:forEach&gt;<br/> &lt;span &gt;&lt;span class="radioRequiredMsg"&gt;Por favor, marque os serviços.&lt;/span&gt;&lt;/span&gt; &lt;/span&gt; </p>&lt;/td&gt; &lt;/tr&gt;

no seu controller:

@Post @Path("/intermediariaServicosDimat/adiciona")   
         public void adicionaServicosDimat(List&lt;Intermediaria&gt; intermediariaList) throws Exception{  
                   for (Intermediaria intermediaria : intermediariaList){
                         validator.addAll(Hibernate.validate(intermediaria));  
                      validator.onErrorUse(page()).of(IntermediariaDimatController.class).formulario();  
                      dao.salva(intermediaria);  
                      }
                   result.redirectTo(SolicitacaoController.class).servicosDimat();  
         }

O que eu fiz foi utilizar na view a propriedade varStatus do foreach, onde no nome do checkbox coloco intermediariaList[] passando assim uma lista para o controller, onde nele e so iterar a mesma e persistir.

Ve se funciona…Ja passei pelo mesmo problema…

Abs.

J

rcnweb…

Cara, você acertou na mosca. Funcionou perfeitamente aqui. Pense na alegria rsrs
Obrigado!!

R

JonRocha…

Po de nada.

Tive a mesma alegria quando me responderam…rsrs

[]'s

juniorsatanas

Por isso que eu AMO O GUJ… DÚVIDA DE 1UNS e DÚVIDA DE VÁRIOS 1UNS !

kkkkkkkkkkkkkkk…

Gostei

jr666

Criado 20 de janeiro de 2011
Ultima resposta 24 de jan. de 2011
Respostas 9
Participantes 4