Olá desenvolvedores, no tutorial anterior implementamos o dialog (modal) que é uma caixa de diálogo gerada em tempo de execução. Esta caixa de diálogo modal será exibida para o usuário assim que o botão correspondente for clicado.

Neste tutorial, seguindo com a implementação do dialog criaremos um formulário de cadastro de e-mails. Antes, porém de seguir com a implementação, adicione a propriedade resizable a tag de componente p:dilog para impedir que a caixa de diálogo seja redimensionada.

FORMULÁRIO NO DIALOG

No dialog começaremos a implementação do formulário de cadastro de e-mails com o componente p:panelGrid onde estabeleceremos três colunas.

<p:panelGrid columns= “3”>...</p:panelGrid>

No escopo do p:panelGrid insira um p:outputLabel com a descrição do campo. Insira também um campo de entrada de dados p:outputText em que o valor apontará para o usuarioPessoaManagedBean do ManagedBean para onde os dados serão enviados. A estrutura do value segue a seguinte hierarquia, ManagedBean de controle, objeto e seu respectivo atributo. Um id também deverá ser adicionado.

E por fim um botão de comando para adicionar o e-mail cadastrado, p:commandButton. No botão a propriedade value corresponde ao que será exibido para o usuário na tela. E o atributo action cumpre a função de chamar o método para adicionar o dado cadastrado.

O método chamado irá processar a informação e então redirecionará para outra tela. Assim, utilizaremos Ajax, visto que a tela não poderá ser recarregada após o botão do dialog ser clicado. Se a tela for recarregada, a caixa de dialogo será fechado.

Por padrão os componentes do PrimeFaces são todos Ajax, então, se desejássemos desabilitar o Ajax teríamos que expressar claramente atribuindo um valor false para o atributo Ajax. Por não fazê-lo, a propriedade de ação será um actionListener chamando o método addEmail(), dessa forma cada vez que o botão for clicado o valor atual será atualizado com o Ajax. Um atributo de update receberá o id e dessa forma campo estará pronto para receber um novo e-mail.

No ManagedBean, usuarioPessoaManagedBeam instancie o objeto de e-mail. É para ele que os dados vindos do formulário de e-mail serão enviados. E logicamente será preciso também criar os métodos Getters and Setters para a instância desse objeto.

private EmailUser emailuser = new EmailUser();

MÉTODO ADDEMAIL()

Embora tenhamos criado o actionListener chamando o método addEmail(), ainda não o temos criado. O método deverá receber os dados enviados pelo actionListener.

public void addEmail(){}

Antes de gravar o e-mail no banco de dados, é preciso que o e-mail esteja vinculado ao usuário para quem ele será adicionado. Quando o botão para abrir o dialog é clicado o usuário é enviado para o ManagedBean e fica em memória esperando os dados serem cadastrados. Mas precisamos informar isso.

No método iremos “setar” para o objeto usuarioPessoa o e-mail cadastrado no objeto emailuser.

Para gravar o e-mail criaremos um DAO – Data Access Object, exclusivo para este fim. o DAO é a camada do sistema (pacotes, classes e métodos) que abstrai todo o acesso ao banco de dados separadamente da lógica de negócio da aplicação.

No ManagedBean, usuarioPessoaManagedBeam instancie o DaoEmail passando como argumento a Entidade Emailuser.

private DaoEmail<EmailUser> = new DaoEmail<EmailUser>();

Agora que temos o DAO implementado voltaremos ao método addEmail(), e uma vez que já temos o e-mail cadastrado, passaremos o objeto de e-mail para o DAO, por meio da instrução Merge. Esta instrução permite que seja especificada uma condição para determinar se os dados serão atualizados ou inseridos na tabela de destino. E ainda, após realizar o processamento a instrução retornará do banco de dados com a chave primária.

emailuser = daoEmail.updateMerge(emailuser);

Feito isso adicionaremos o dado recebido e já vinculado ao usuário à lista de e-mails. E então instanciaremos um novo objeto deixando o dialog pronto para cadastrar um novo e-mail. Uma mensagem de confirmação deverá ser exibida para o usuário.

EM POUCAS PALAVRAS

Para que a mensagem de feedback seja mostrada em tela para o usuário após ele adicionar um novo registro, é preciso promover uma alteração em um dos componentes de tela. Dessa forma encontre no formulário de cadastro a tag de componente p:message e a substitua por p:growl, que é usado para exibir FacesMessages. Abaixo um exemplo de como ficará o dialog.