Pessoal, estou com uma dúvida na qual tenho um dataTable onde estão os usuários cadastrados no banco.
Ao clicar no botão “Alterar”, aparece um <p:dialog> com as informações do usuário que eu escolhi.
Uma das informações que eu posso alterar é o email do usuário. Para alterar esse email, devo verificar se o novo email já é existente no banco de dados. Até nessa parte está tranquilo.
O negócio é que mesmo se eu não alterar o email, ele chama esta função que verifica se o email é existente ou não, ou seja, ele não vai aceitar alterar o usuário, pois realmente o email é existente (É do próprio usuario selecionado)
Queria saber se tem como eu verificar se determinado campo manteve seu valor original após o submit. Colocarei os códigos que estou tentando fazer isso funcionar.
<h:form prependId="false">
<p:dataTable id="tabelaUsuario" var="usuario" value="#{usuarioBean.listaUsuario}" style="font-size: 12px;"
paginator="true" rows="10" >
<f:facet name="header">
<h:outputText value="Alterar Usuários"/>
</f:facet>
//Demais códigos omitidos
<p:column>
<f:facet name="header">
<h:outputText value="E-mail"/>
</f:facet>
<h:outputText value="#{usuario.email}"/>
</p:column>
<p:column style="text-align:center;">
<f:facet name="header">
<h:outputText value="Alterar"/>
</f:facet>
<p:commandLink actionListener="#{usuarioBean.preparaAlterarUsuario}" update="infoUsuario" oncomplete="dialogUsuario.show()">
<h:graphicImage library="imagens/icones" name="alterar.png"/>
</p:commandLink>
</p:column>
</p:dataTable>
<!-- POP-UP ONDE O USUÁRIO DIGITARÁ OS DADOS PARA ALTERAÇÃO -->
<p:dialog header="Gerencia Usuario" widgetVar="dialogUsuario" resizable="true" modal="false"
position="center" width="500" id="alter">
<h:messages/>
<h:form prependId="false" id="frmAlterar">
//Demais campos omitidos
<h:outputText for="usuarioEmail" value="E-mail:" />
<p:inputText value="#{usuarioBean.usuario.email}" id="usuarioEmail" />
<p:commandButton actionListener="#{usuarioBean.alterarUsuario}" value="Alterar" update="messages"
process="@form"/>
</h:panelGrid>
Bean
private Usuario usuario;
public void preparaAlterarUsuario(ActionEvent event)
{
//Pega o usuário da linha do dataTable
usuario = (Usuario)(this.listaUsuario.getRowData());
}
public void alterarUsuario(ActionEvent event){
try{
//Chama o método para validações
logic.alterarUsuario(usuario);
//ETC
}
Validações
public void alterarUsuario(Usuario usuario)
boolean emailExistente=false;
//Caso o email digitado seja diferente do email inicial do dataTable, é verificado
//Se o novo email digitado consta no banco. Caso consta, o usuário não é alterado
if(usuario.getEmail Foi Alterado na página xhtml){
emailExistente = verificarEmail(usuario);
}
//Omitidos demais validações
Já fiz alguns teste sem sucesso tanto o Bean como Request ou como Session;
Obrigado.