JSF registrando no banco automaticamente

6 respostas
S

Galera bom dia estou estudando JSF e to com uma pequena dúvida eu tenho um dataTable que me retorna alguns objetos do tipo List, e na pagina que tem a dataTable tem mais 2 buttons um de pesquisa outro de cadastro, o sinistro é o seguinte:

Na minha dataTable tenho 2 inputText que vem os valores da minha List, se eu alterar estes valores e clicar em pesquisar ou em qqr outro botao, ele simplesmente SOBRESCREVE o valor no meu banco o que escrevi no inputText, sendo que cliquei em um botao que efetua pesquisa e em momento algum ele faz um insert ou update no banco.

È possivel o Spring gravar automaticamente informacao no banco ?

6 Respostas

S

veja meu codigo

<fieldset style="width: 90%">
                        <legend>Cadastrar IMC</legend> 
                        <span jsfc="h:messages" globalOnly="true"></span>
                        <br />
                        Codigo da Carteirinha<br/>
                        <h:inputText value="#{pacienteController.paciente.pac_codCart}" size="8" id="pac_codCart" style="width: 170px">

                        </h:inputText>

                        <input jsfc="h:commandButton" type="submit" action="#{pacienteController.pesquisa}"
                               id="pesquisa" value="Pesquisar"/>
                        <br /><br />

                        <h:dataTable border="1" id="pacientes" 
                                     style="width: 94%" class="menu1"
                                     value="#{pacienteController.pesquisa()}"
                                     var="item" rendered="${pacienteController.paciente.pac_codCart != null}">
                            <h:column id="column1">
                                <f:facet name="header">
                                    <h:outputText value="Nome"/>
                                </f:facet>
                                <h:outputText value="#{item.pac_nome}"/>
                            </h:column>

                            <h:column id="column2">
                                <f:facet name="header">
                                    <h:outputText value="Codigo"/>
                                </f:facet>
                                <h:outputText value="#{item.pac_codCart}" />
                            </h:column>

                            <h:column id="column3">
                                <f:facet name="header">
                                    <h:outputText value="Peso"/>
                                </f:facet>
                                <h:inputText value="#{item.pac_peso}" size="8" 
                                             id="pac_peso">
                                </h:inputText>
                            </h:column>

                            <h:column id="column4">
                                <f:facet name="header">
                                    <h:outputText value="Altura"/>
                                </f:facet>
                                <h:inputText value="#{item.pac_altura}" size="8" 
                                             id="pac_altura">
                                </h:inputText>
                            </h:column>

                            <h:column id="column5">
                                <f:facet name="header">
                                    <h:outputText value="IMC"/>
                                </f:facet>
                                <h:inputText value="#{item.pac_imc}" size="8" 
                                             id="pac_imc" disabled="true" >
                                </h:inputText>
                            </h:column>
                        </h:dataTable>
                        
                        <input jsfc="h:commandButton" type="submit" 
                               id="cadastrar" value="Cadastrar"/>
                    </fieldset>

Vou exemplificar novamente a pagina vai ser carregada com os valores pesquisados, ai vou no campo

<h:inputText value="#{item.pac_altura}" size="8" 
                                             id="pac_altura">
                                </h:inputText>

que no caso esta retornando o valor 111, se eu escrever 222 e clicar em pesquisar ele ta gravando esta informacao no banco sinistramente.

DaniloAndrade

isso é uma funcionalidade do hibernate/jpa.

o que acontece é que quando vc altera os dados da tela e faz o submit usando a pesquisa, o jsf seta o valor que vc preencheu na tela no objeto que esta sendo gerenciado pelo hibernate/jpa,
e quando esse objeto que esta sendo gerenciado sofre alteração o jpa faz um update para que os dados fiquem consistentes.

S

Mas se eu fiz uma pesquisa é correto ele atualizar automaticamente no banco pq pensa cumigo tenhu uma tela q me retorna o que eu pesquisei, ai eu começo a fazer as alteracões e derrepente nao preciso mais dessas alterações o que faço?

DaniloAndrade

uma opção é ao invés de fazer o bind do seu grid com a lista que vc fez a consulta, fazer o bind com uma copia defensiva dessa lista , ai vc so vai atualizar quando vc clicar em alterar.

outra opção apos vc fazer a consulta tirar a lista do gerenciamento do hibernate, mas isso vai te trazer alguns problemas, por exemplo se vc tem atributo na sua entidade anotado como lazy , ao tirar o objeto do gerenciamento do hibernate quando vc fizer um get nesse atributo vc pode receber uma exception no lugar.

acho que é isso

DaniloAndrade

pode ser que haja alguma forma de configurar isso mas eu não sei te informa

S

Alguem tem algum exemplo de como faço para só cadastrar quando realmente clicar em cadastrar?

Criado 31 de agosto de 2012
Ultima resposta 2 de set. de 2012
Respostas 6
Participantes 2