Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Persistir campo "select" no método atualiza

Bom dia pessoal!

Eu estou com um "probleminha" no sistema ao tentar alterar um registro de Produto, os campos select´s não estão persistindo a informação do registro... Na vdd eles até não carregam mais as informações quando eu chamo o método atualiza...

Na classe modelo "Produto", eu tenho o atributo "montadora":

    @Column(length = 30)
    private String montadora;

No ProdutoDao, eu tenho a implementação do método "listaMontadora":

    public List<Montadora> listaMontadora(String marca) {
        TypedQuery<Montadora> query = manager.createQuery("Select m from Montadora m where m.marca = :marca",
                Montadora.class);
        query.setParameter("marca", marca);
        return query.getResultList();
    }

No ProdutoController, eu chamo esse médodo do ProdutoDao:

    public void listaMontadora(String marca) {
        List<Montadora> montadoras = produtoDao.listaMontadora(marca);
        result.include("montadoras", montadoras);
    }

Ainda no ProdutoController, quando eu chamo o form.jsp, eu carrego a listatem:

    public void formVaz() {
        listaMontadora("NomeDaEmpresa");
    }

No form.jsp eu tenho o input desse atributo:

<label>Montadora:</label>
<select name="produto.montadora" class="form-control">
    <c:forEach items="${montadoras}" var="montadora">
        <option value="${montadora.nome}" ${produto.montadora eq montadora.nome ? "SELECTED" : ""}>${montadora.nome}</option>
    </c:forEach>
</select>

Até ai TUDO FUNCIONANDO PERFEITAMENTE !!!

No ProdutoController eu tenho o médodo "atualiza":

public void atualiza(Integer id, Result result) {
    Produto produto = produtoDao.buscaPorId(id);
    result.include(produto);
    result.of(this).form();
}

E na lista.jsp eu chamo esse método "atualiza":

<td style="text-align: center">
<a href="${linkTo[ProdutoController].atualizaVaz}?id=${produto.id}" class="addSelecionaLista" title="Selecionar">
<i class="glyphicon glyphicon-log-in"></i></a>
</td>

No console gera:

11:36:35,439  WARN [JstlLocalization    ] couldn't find message bundle, creating an empty one
java.util.MissingResourceException: Can't find bundle for base name messages, locale pt_BR
    at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
    at java.util.ResourceBundle.getBundleImpl(Unknown Source)
    at java.util.ResourceBundle.getBundle(Unknown Source)
    at br.com.caelum.vraptor.core.JstlLocalization.extractUnsafeBundle(JstlLocalization.java:78)
    at br.com.caelum.vraptor.core.JstlLocalization.getBundle(JstlLocalization.java:69)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstance(MethodInjectionPoint.java:86)
    at org.jboss.weld.injection.producer.ProducerMethodProducer.produce(ProducerMethodProducer.java:96)
    at org.jboss.weld.injection.producer.AbstractMemberProducer.produce(AbstractMemberProducer.java:151)
    at org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:183)
    at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:69)
    at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:733)
    at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:789)
    at org.jboss.weld.injection.ParameterInjectionPointImpl.getValueToInject(ParameterInjectionPointImpl.java:76)
    at org.jboss.weld.injection.ConstructorInjectionPoint.getParameterValues(ConstructorInjectionPoint.java:138)
    at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:68)
    at org.jboss.weld.injection.producer.AbstractInstantiator.newInstance(AbstractInstantiator.java:28)
    at org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:85)
    at org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:183)
    at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:149)
    at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
    at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78)
    at br.com.caelum.vraptor.validator.DefaultValidator$Proxy$_$$_WeldClientProxy.addAll(Unknown Source)
    at br.com.caelum.vraptor.observer.ParametersInstantiator.instantiate(ParametersInstantiator.java:91)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.start(DefaultInterceptorStack.java:90)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$_$$_WeldClientProxy.start(Unknown Source)
    at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:93)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:123)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
11:36:35,455  INFO [ValidationXmlParser ] HV000007: META-INF/validation.xml found. Parsing XML based configuration.
Hibernate: 
    select
        produto0_.id as id1_2_,
        produto0_.adesivo as adesivo2_2_,
        produto0_.ate_ano as ate_ano3_2_,
        produto0_.capa as capa4_2_,
        produto0_.catalogo as catalogo5_2_,
        produto0_.cilindrada as cilindra6_2_,
        produto0_.codigo as codigo7_2_,
        produto0_.codigo_coroa as codigo_c8_2_,
        produto0_.codigo_corrente as codigo_c9_2_,
        produto0_.codigo_pinhao as codigo_10_2_,
        produto0_.codigo_rapido as codigo_11_2_,
        produto0_.comprimento as comprim12_2_,
        produto0_.cor as cor13_2_,
        produto0_.cor_adesivo as cor_ade14_2_,
        produto0_.cor_decal as cor_dec15_2_,
        produto0_.de_ano as de_ano16_2_,
        produto0_.decal as decal17_2_,
        produto0_.descricao as descric18_2_,
        produto0_.descricao_tipo_produto as descric19_2_,
        produto0_.desenho as desenho20_2_,
        produto0_.diam_central as diam_ce21_2_,
        produto0_.diam_entre_furos as diam_en22_2_,
        produto0_.diam_externo_estria as diam_ex23_2_,
        produto0_.diam_furos as diam_fu24_2_,
        produto0_.diam_interno_estria as diam_in25_2_,
        produto0_.diam_passo as diam_pa26_2_,
        produto0_.dianteira_traseira as diantei27_2_,
        produto0_.dobra as dobra28_2_,
        produto0_.espessura as espessu29_2_,
        produto0_.imagem as imagem30_2_,
        produto0_.imagem_coroa as imagem_31_2_,
        produto0_.imagem_corrente as imagem_32_2_,
        produto0_.imagem_embalagem as imagem_33_2_,
        produto0_.imagem_pinhao as imagem_34_2_,
        produto0_.injetado as injetad35_2_,
        produto0_.lancamento as lancame36_2_,
        produto0_.largura as largura37_2_,
        produto0_.largura_estria as largura38_2_,
        produto0_.liberado as liberad39_2_,
        produto0_.linha_veiculo as linha_v40_2_,
        produto0_.local_imagem as local_i41_2_,
        produto0_.marca as marca42_2_,
        produto0_.modelo as modelo43_2_,
        produto0_.modelo_tipo_produto as modelo_44_2_,
        produto0_.montadora as montado45_2_,
        produto0_.nro_dentes_elos as nro_den46_2_,
        produto0_.observacoes as observa47_2_,
        produto0_.original as origina48_2_,
        produto0_.passo as passo49_2_,
        produto0_.pinca_dupla as pinca_d50_2_,
        produto0_.pino as pino51_2_,
        produto0_.preco as preco52_2_,
        produto0_.prefixo as prefixo53_2_,
        produto0_.promocao as promoca54_2_,
        produto0_.qtd_dentes_estria as qtd_den55_2_,
        produto0_.qtd_furos as qtd_fur56_2_,
        produto0_.queima_estoque as queima_57_2_,
        produto0_.rebaixo as rebaixo58_2_,
        produto0_.rebaixo_furos as rebaixo59_2_,
        produto0_.self_clean as self_cl60_2_,
        produto0_.semelhantes as semelha61_2_,
        produto0_.sistema_freio as sistema62_2_,
        produto0_.sulfixo_opcional as sulfixo63_2_,
        produto0_.tamanho as tamanho64_2_,
        produto0_.tipo_corrente as tipo_co65_2_,
        produto0_.tipo_produto as tipo_pr66_2_ 
    from
        TAB_PRODUTO_DADOS_TECNICOS produto0_ 
    where
        produto0_.id=?

E quando eu sou redirecionado para o form.jsp, os campos do tipo select "NÃO CARREGAM" a informação do registro e "PERDEM" os itens...

6 respostas

Bom, não vi em nenhum lugar um código sobre atualização... e a exception que está sendo lançada tem a ver com alguma validação ou uso do bundle no sistema. Parece que vc não criou o arquivo de mensagens...

Boa noite Alberto!

Desculpe-me, postei somente a chamada do método no ProdutoController, esqueci de postar a implementação do atualiza no ProdutoDao...

Segue abaixo:

    public Produto atualiza(Integer id, Result result) {
        Produto produto = this.buscaPorId(id);
        return produto;
    }

    public Produto buscaPorId(Integer id) {
        try {
            TypedQuery<Produto> query = manager.createQuery("Select p from Produto p Where p.id = :id", Produto.class);
            query.setParameter("id", id);
            return query.getSingleResult();
        } catch (Exception e) {
            return null;
        }
    }

Obrigado!

Opa, o método atualiza só faz uma busca...

Não Alberto...

O método "atualiza()", chama o método "buscaPorId()"...

E depois esse método "atualiza":

return produto;

Todos os inputs são carregados com a informação correta do registro da tabela Produto...

MENOS os campos do tipo "select", que além de não carregarem a informação do registro... Perdem o conteúdo da lista...

solução!

Bom dia Alberto! Cara consegui resolver o problema dos campos "select´s", que listam as informações vindas de uma tabela "auxiliar"... Tanto para carregar a lista dos itens, quanto para persistir a informação do registro... No momento da atualização...

Para quem passar para o mesmo problema, no método atualiza do Controller, eu carrego a listagem ANTES de persistir o objeto, no caso produto... Segue a solução:

    public void atualiza(Integer id, Result result) {
        Produto produto = produtoDao.buscaPorId(id);
        result.include(produto);
        listaTipoProduto("Empresa");
        listaMontadora("Empresa");
        result.of(this).form();
    }

.....