Vraptor + For com Checkbox?

23 respostas
J

Pessoal Boa tarde !

Estou com um problema para salvar uma lista de checkbox usando um FOR !
segue DER :

Cliente cadastra uma solicitação, depois escolhe determinados serviços para essa solicitação :
[url]https://lh6.googleusercontent.com/_nTzBoYSeT2I/TWPu_3Ib3gI/AAAAAAAAEVU/2IEAgMhPEaY/s1152/1solicitacao.png[/url]
[img]https://lh6.googleusercontent.com/_nTzBoYSeT2I/TWPu_3Ib3gI/AAAAAAAAEVU/2IEAgMhPEaY/s1152/1solicitacao.png[/img]

Segue as classes e telas :

Solicitacao.Controller

@Post @Path("/solicitacao/adiciona")
        public void adiciona(Solicitacao solicitacao) throws Exception{

            validator.addAll(Hibernate.validate(solicitacao));
            validator.onErrorUse(page()).of(SolicitacaoController.class).formulario();
            dao.salva(solicitacao);
            result.redirectTo(SolicitacaoController.class).formulario();
        }
Solicitacao.DAO
public void salva(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatus("Ativo");
        solicitacao.setSoliDataAtendimento(new Date());
        solicitacao.setSoliDataContato(new Date());
        solicitacao.setSoliDataSolicitacao(new Date());
        solicitacao.setSoliStatusSolicitacaoNome("CAC - ENTRADA NA SOLICITAÇÃO - 1");
        session.save(solicitacao);
        tx.commit();
    }

segue a tela para este cadastro :

[url]https://lh5.googleusercontent.com/_nTzBoYSeT2I/TWPvAZVEMAI/AAAAAAAAEVc/IfB4d6y5hxM/s1152/solicitacao.png[/url]
[img]https://lh5.googleusercontent.com/_nTzBoYSeT2I/TWPvAZVEMAI/AAAAAAAAEVc/IfB4d6y5hxM/s1152/solicitacao.png[/img]

Segue o codigo para cadastrar os serviços na tabela intermediaria :
@Post @Path("/intermediariaServicosDimat/adiciona")
        public void adicionaServicosDimat(List<Intermediaria> intermediariaList) throws Exception{

                    for(Intermediaria intermediaria : intermediariaList) {
                        validator.addAll(Hibernate.validate(intermediaria));
                        validator.onErrorUse(page()).of(IntermediariaDimeeController.class).formulario();
                        dao.salva(intermediaria);
                    }
                    result.redirectTo(SolicitacaoController.class).servicosDimat();
             
        }
[url]https://lh3.googleusercontent.com/_nTzBoYSeT2I/TWPvADDbMCI/AAAAAAAAEVY/baG7HwUyo6Y/s1152/servicos.png[/url] [img]https://lh3.googleusercontent.com/_nTzBoYSeT2I/TWPvADDbMCI/AAAAAAAAEVY/baG7HwUyo6Y/s1152/servicos.png[/img]

MINHA DÚVIDA É : como adicionar o código da solicitação no caso da foto valor (4), NESSE FOR !

Quando eu cadastro ele gera varias tupulas, por causa do for, mas não leva o código da solicitação !

[url]https://lh6.googleusercontent.com/_nTzBoYSeT2I/TWPysb7NwnI/AAAAAAAAEV4/ANACB7cvV_I/s1152/soli.png[/url]
[img]https://lh6.googleusercontent.com/_nTzBoYSeT2I/TWPysb7NwnI/AAAAAAAAEV4/ANACB7cvV_I/s1152/soli.png[/img]

23 Respostas

L

vc tem como explicar o que vc precisa em, sei lá, 10 linhas e sem várias imagens?

J

Tenho sim Lucas !

@Post @Path("/intermediariaServicosDimat/adiciona")
        public void adicionaServicosDimat(List<Intermediaria> intermediariaList) throws Exception{

                    for(Intermediaria intermediaria : intermediariaList) {
                        validator.addAll(Hibernate.validate(intermediaria));
                        validator.onErrorUse(page()).of(IntermediariaDimeeController.class).formulario();
                        dao.salva(intermediaria);
                       //Intermediaria.setInteCodigoSolicitacao("valor da seção ");
                    }
                    result.redirectTo(SolicitacaoController.class).servicosDimat();
             
        }
quero salvar a lista de valores e levar o codigo da solicitação !

Carrego uma lista de serviços 10 chebox, e o codigo da solicitação ! quero que tudo seja persistido na hora de salvar ! ele só salva os serviços !
como cada serviço e criado em uma TÚPULA ele não leva o código da solicitação !

L

ainda não entendi…

vc tem o codigo de solicitação mapeado na Intermediaria?

J

em intermediaria !

@Column(name = "inte_codigo_solicitacao") private Integer inteCodigoSolicitacao;

em solicitação

@OneToMany(mappedBy = "cljuFkSolicitacaoId") private Collection<ClienteJuridica> clienteJuridicaCollection; @OneToMany(mappedBy = "procFkSolicitacaoId")

J

Lucas Bom dia !

O relacionamento entre Solicitação -----------------------> Intermediária Funciona perfeitamente..

1 - cadastro de solicitação funciona normalmente, cadastra uma solicitação gera um código

@Post @Path("/solicitacao/adiciona")
        public void adiciona(Solicitacao solicitacao) throws Exception{
            validator.addAll(Hibernate.validate(solicitacao));
            validator.onErrorUse(page()).of(SolicitacaoController.class).formulario();
            dao.salva(solicitacao);
            result.redirectTo(SolicitacaoController.class).formulario();
        }

Na tela de cadastro da intermediaria eu uso Checkbox, cada Chequebox representa um serviço, quando eu marco 5 serviços por exemplo são criadas 5 linhas (túpulas) no meu banco !

id nome_do_serviço Descriçao valor CODIGO_DA_SOLICITAÇAO
1 agua exame ..... 500,00 ?
2 fezes exame ..... 500,00 ?
3 multi exame ..... 500,00 ?
4 ferro exame ..... 500,00 ?
5 pedra exame ..... 500,00 ?

Mas não é levado o código da solicitação, pois eu uso um FOR no metódo adicionar, se eu tirar o For, ele cadastra o código da solicitação perfeitamente mas não cadastra os Serviços..

Logo o meu problema e adicionar o codigo da solicitação no For, para toda vez que ele gerar uma linha (tupula) ele levar o codigo da solicitação !

@Post @Path("/intermediariaServicosDimat/adiciona")
        public void adicionaServicosDimat(List<Intermediaria> intermediariaList) throws Exception{

                    for(Intermediaria intermediaria : intermediariaList) {
                        validator.addAll(Hibernate.validate(intermediaria));
                        validator.onErrorUse(page()).of(IntermediariaDimeeController.class).formulario();
                        dao.salva(intermediaria);
                    }
                    result.redirectTo(SolicitacaoController.class).servicosDimat();
             
        }
J

Obrigado Lucas…

Junior.

J

Lucas tem algum exemplo que possa da uma luz sobre isso ai ?

Jr

L

pior que não, mas sugiro vc dar uma olhada nas docs/tutoriais do hibernate

J

Conseguindo algum resultado posto aqui…

Mas você entendeu a dúvida ?

jr

L

TLDR

P

Após vc enviar a solicitação é que vc mostra a pagina pra escolher os serviços, é isso ? Se for isso o que ta faltando é vc colocar o ID da solicitacao no result e recuperar na pagina de serviços e colocar ele como hidden e no name do INPUT coloque a atribuição da classe.atributo e ai no “/intermediariaServicosDimat/adiciona” vc vai ter esse valor ja atribuido no objeto “intermediaria”

J

PB boa tarde !

Tudo bom ?

Isso já ta feito :

<tr>
                                                <td><center>Código</center></td>
                                                &lt;td&gt;<a>${solicitacao.soliPkId}</a>&lt;/td&gt;
                                            &lt;/tr&gt;


                                        &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="servicosDimee" items="${servicosdimees}" varStatus="i"&gt;
                                                          &lt;input type="checkbox" name="intermediariaList[${i.index}].inteFkServicoDimeeId.smeePkId"
                                                                 value="${servicosDimee.smeePkId}" /&gt;${servicosDimee.smeeNome}<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;
J

J

o problema e por dentro do FOR este código !

G

Tem alguém que logo vai ganhar um processo por publicar prints e fontes dos projetos pela internet afora…

P
juniorsatanas:
PB boa tarde !

Tudo bom ?

Isso já ta feito :

&lt;tr&gt;
                                                &lt;td&gt;&lt;center&gt;Código&lt;/center&gt;&lt;/td&gt;
                                                &lt;td&gt;<a>${solicitacao.soliPkId}</a>&lt;/td&gt;
                                            &lt;/tr&gt;


                                        &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="servicosDimee" items="${servicosdimees}" varStatus="i"&gt;
                                                          &lt;input type="checkbox" name="intermediariaList[${i.index}].inteFkServicoDimeeId.smeePkId"
                                                                 value="${servicosDimee.smeePkId}" /&gt;${servicosDimee.smeeNome}<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;

Acho que não, pois na linha 3 vc só exibe e esse valor não volta pro servidor, dentro do FOR coloque um outro <INPUT> como hidden e atribua o valor da linha 3 ai vc vai ter o objeto pronto com a referencia ao objeto Solicitação

J

garcia-jj Bom dia !

Esse sistema SIGI, é um sistema Open, do GOVERNO DO ESTADO quando for terminado será postado um manual o DER e os Fontes aqui !

Abraço !

J

pbnf Bom Dia !

Antes de tudo obrigado pela ajuda, como ficaria esse FOR ? eu não conseguir captar sua mensagem !

Abraço Jr.

P
juniorsatanas:
PB boa tarde !

Tudo bom ?

Isso já ta feito :

&lt;tr&gt;
                                                &lt;td&gt;&lt;center&gt;Código&lt;/center&gt;&lt;/td&gt;
                                                &lt;td&gt;<a>${solicitacao.soliPkId}</a>&lt;/td&gt;
                                            &lt;/tr&gt;


                                        &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="servicosDimee" items="${servicosdimees}" varStatus="i"&gt;
                                                          &lt;input type="checkbox" name="intermediariaList[${i.index}].inteFkServicoDimeeId.smeePkId"
                                                                 value="${servicosDimee.smeePkId}" /&gt;${servicosDimee.smeeNome}<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;

Dentro do <c:forEach> coloque a linha:

<input type="hidden" name="intermediariaList[${i.index}].inteCodigoSolicitacao" value="${solicitacao.soliPkId}" />

J

pbnf Boa Noite !

Ficou muito agradecido pela sua disponibilidade de ajudar o projeto, bom ficou %99,99 perfeito, Graças a você…

Só tem um porém para eu fechar o tópico . quando eu mando salvar se tiver 80 serviços ele gera 80 linhas, mesmo se só 1 estiver marcada, como corrigir isso ?

Abraço.

jr

L

Sugiro o seguinte:

tire essa linha:

Inclua uma linha fora do foreach:

recupere o solicitacao.soliPkId no controler e grave ele em cada intermediaria da lista recuperada

J

boa noite cumpade !


recupere o solicitacao.soliPkId no controler e grave ele em cada intermediaria da lista recuperada

não compreendi isso !

obrigado e boa noite !

jr.

L

Boa noite junior

Deve ser algo assim:

Em vez de: public void adicionaServicosDimat(List intermediariaList) throws Exception{

public void adicionaServicosDimat(List intermediariaList, Solicitacao solicitacao) throws Exception{

e

incluir dentro do for do método acima:

intermediaria.setInteCodigoSolicitacao(solicitacao) ou
intermediaria.setInteCodigoSolicitacao(solicitacao.getInteCodigoSolicitacao), não olhei/entendi muito bem o seu código

Criado 22 de fevereiro de 2011
Ultima resposta 10 de mar. de 2011
Respostas 23
Participantes 5