Problema de Endereço de memória JSF 2.0, PrimeFaces

3 respostas
Scoobydoo

Olá, estou fazendo um tela de cadastro de usuários com primefaces.
Tenho uma panel de consulta, uma panel de cadastro e um dialog que abre para criar ou editar um usuário…

Na minha panel de consulta, tenho as seguintes informações

<p:panel id="painelConsulta" header="Lista de usuários" style="text-align:left;width:98%;"> <p:dataTable value="#{usuarioControle.listaUsuario}" id="tabela" emptyMessage="Nenhum registro encontrado" rowIndexVar="var" paginator="true" paginatorPosition="bottom" firstPageLinkLabel="Primeira" previousPageLinkLabel="Anterior" nextPageLinkLabel="Proxima" lastPageLinkLabel="ultima" rows="7" var="usuario" width="100%"> <p:column rendered="false"> <center> <f:facet name="header"> <h:outputText value="ID" /> </f:facet> <h:outputText value="#{usuario.cd_usuario}" styleClass="letra1" /> </center> </p:column> <p:column style="width:30%"> <center> <f:facet name="header"> <h:outputText value="Nome" /> </f:facet> <h:outputText value="#{usuario.nm_usuario}" styleClass="letra1" /> </center> </p:column> <p:column> <center> <f:facet name="header"> <h:outputText value="Email" /> </f:facet> <h:outputText value="#{usuario.ds_email_usuario}" styleClass="letra1"> </h:outputText> <h:inputHidden value="#{usuario.ds_senha}" styleClass="letra1"> </h:inputHidden> </center> </p:column> <p:column style="width:20px"> <center> <p:commandButton action="#{usuarioControle.alterar}" image="ui-icon-tag" title="Alterar" oncomplete="cadastroDialog.show()" update="usuarioForm:painelCadastro"> <f:setPropertyActionListener target="#{usuarioControle.usuario}" value="#{usuario}" /> </p:commandButton> </center> </p:column> <p:column style="width:20px"> <center> <p:commandButton action="#{usuarioControle.excluir}" image="ui-icon-trash" title="Excluir" update="usuarioForm, messages"> <f:setPropertyActionListener target="#{usuarioControle.usuarioExcluir}" value="#{usuario}" /> </p:commandButton> </center> </p:column> </p:dataTable> </p:panel>
Quando clico no botão para alterar, eu abro o Dialog com as informações da classe Usuario. Segue dialog:

<p:dialog header="Cadastrar Usuario" widgetVar="cadastroDialog" resizable="false" draggable="false" width="530" showEffect="fade" hideEffect="fade" modal="true"> <p:panel id="painelCadastro" style="text-align:left;width:100%;"> <h:panelGrid id="painelGridCadastro" columns="1"> <h:panelGrid columns="1"> <h:outputText value="Nome:" /> <h:inputText value="#{usuarioControle.usuario.nm_usuario}" size="70"></h:inputText> <h:inputHidden value="#{usuarioControle.usuario.cd_usuario}"></h:inputHidden> <h:inputHidden value="#{usuarioControle.usuario.ds_senha}"></h:inputHidden> </h:panelGrid> <h:panelGrid columns="1"> <h:outputText value="Senha:" /> <h:inputSecret id="senha" value="#{usuarioControle.ds_senha_alterada}" size="70"> </h:inputSecret> </h:panelGrid> <h:panelGrid columns="1"> <h:outputText value="Email:" /> <h:inputText value="#{usuarioControle.usuario.ds_email_usuario}" size="70"> </h:inputText> </h:panelGrid> </h:panelGrid> <center> <p:commandButton value="Gravar" action="#{usuarioControle.gravar}" oncomplete="cadastroDialog.hide()" update="painelConsulta, painelCadastro, messages" /> <p:commandButton value="Limpar" action="#{usuarioControle.limpar}" update="painelCadastro, messages" /> </center> </p:panel> </p:dialog>
Altero os dados e clico no botão gravar.
O problema é que ao gravar, eu faço algumas validações e se eu retorno False, ou seja, algum problema na hora de salvar como duplicação de nome de usuário, ele não deveria fazer nada, nem no banco, nem na tela.
Mas o panel de consulta atualiza o usuario de acordo com as informações que o cliente digitou no dialog, mesmo que eu não tenha mudado no banco de dados.
Alguém sabe o que pode ser ou como solucionar?

3 Respostas

Hebert_Coelho

Se houve erro, você tem que voltar o objeto que foi enviado para alteração/inserção ao normal.

Isso costuma muito acontecer quando se usa SessionScoped/ViewScoped.

Scoobydoo

Exato…
Mas como posso fazer isso…
Algum… return false;
Seria tão simples ‘-’

Scoobydoo

Bom o jeito que arranjei foi criando um new Usuario() e defini todos os set’s dele manualmente…
Mas é um jeito muito ruim…
Alguma dica?

Criado 14 de maio de 2012
Ultima resposta 15 de mai. de 2012
Respostas 3
Participantes 2