Como usar o A4J:form para mostrar um modalpanel depois de persistir objeto!

2 respostas
R

Bom dia galera, estou com uma dúvida, tenho um form para persistir nome e email, esse campos são validados com jsf, richfaces e hibernate-validator, até ai blz, mas queria mostrar um modalpane do richfaces com as mensagem se foi gravado com sucesso ou não, ou seja, como, onde e como tratar isso, pensei em receber a respo do bean java numa tag dentro do javascript, bom ta ai meu código de testes.

Valeu galera

<script type="text/javascript">
    function funcao(){
        if(document.forms['newsletter'].elements['newsletter:button'].value == true){
            alert('TESTE!!!');
        }
    }
</script>

<a4j:form id="newsletter" onsubmit="funcao()">
     <h:inputText id="nome" size="19" value="#{EmailInformativoMB.nome}" class="input1_lateral_emailinformativo" required="true" requiredMessage="O Nome é requerido" />
     <h:inputText id="email" size="19" value="#{EmailInformativoMB.email}" class="input2_lateral_emailinformativo" required="true" requiredMessage="O Email é requerido">
          <rich:beanValidator event="onblur" />
     </h:inputText>
     <a4j:commandButton id="button" image="images/newsletter/botao_ok.jpg" action="#{EmailInformativoMB.cadastrarEmailInformativo}" />
     <rich:message for="nome" /><br />
     <rich:message for="email" /><br /><br />
</a4j:form>

Bean java

package com.as.commerce.mb;

import com.as.commerce.controller.EntityManagerFactorySingleton;
import com.as.commerce.dao.EmailInformativoDAO;
import com.as.commerce.model.EmailInformativo;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import org.hibernate.validator.Email;

public class EmailInformativoMB {

    private String nome;
    @Email
    private String email;
    private EmailInformativo emailInformativo;
    private EmailInformativoDAO emailInformativoDAO;
    private EntityManager em;

    public EmailInformativoMB() {
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void cadastrarEmailInformativo() {
        try {
            //inicializa o manager
            em = EntityManagerFactorySingleton.getEntityManager();
            //inicia a sessao
            em.getTransaction().begin();
            //cria o objeto que vai ser persistido
            emailInformativo = new EmailInformativo();
            emailInformativo.setNome(nome);
            emailInformativo.setEmail(email);
            //Cria o DAO
            emailInformativoDAO = new EmailInformativoDAO(em);
            //Persiste o Objeto
            emailInformativoDAO.create(emailInformativo);
            //Comita a transação
            em.getTransaction().commit();

        } catch (Exception ex) {
            //Volta a transação
            em.getTransaction().rollback();
            System.out.println(ex.getStackTrace());
        } finally {
            FacesContext.getCurrentInstance().addMessage(nome, new FacesMessage("Email Enviado com sucesso!"));
            //em qualquer hipotese fecha o manager
            //em.close();
        }
    }
}

Abraços!!!

2 Respostas

javax.skol

tente com oncomplete=""

R

psyltrance valeu pela dica, acho que estamos quase chegando lá, só tem um problema de qualquer maneira ele ta fazendo a validação e chamando o modalpanel ao mesmo tempo, eu queria que chamasse o modalpanel só se já estivesse validado o nome e o email, e nesse modalpanel trouxesse “Nome e Email Cadastrado com Sucesso” ou o erro que deu provavelmente vindo do bean.

Atualmente a página esta assim:

<a4j:form id="newsletter">
                <h:inputText id="nome" value="#{EmailInformativoMB.nome}" required="true" requiredMessage="Nome requerido" />
                <h:inputText id="email" value="#{EmailInformativoMB.email}"  required="true" requiredMessage="Email requerido">
                    <rich:beanValidator event="onblur" />
                </h:inputText>
                <a4j:commandButton id="button" action="#{EmailInformativoMB.cadastrarEmailInformativo}" oncomplete="Richfaces.showModalPanel('panel')" />
                <rich:message for="nome" /><br />
                <rich:message for="email" /><br /><br />
                 <rich:modalPanel id="panel" width="300" height="120">
                    <f:facet name="header">
                        <h:panelGroup>
                            <h:outputText value="NewsLetter"></h:outputText>
                        </h:panelGroup>
                    </f:facet>
                    <a4j:commandButton value="OK" id="ok" onclick="#{rich:component('panel')}.hide()"/>
                </rich:modalPanel>
            </a4j:form>

e o bean assim:

public class EmailInformativoMB {

    private String nome;
    @Email
    private String email;
    private EmailInformativo emailInformativo;
    private EmailInformativoDAO emailInformativoDAO;
    private EntityManager em;

    public EmailInformativoMB() {
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void cadastrarEmailInformativo() {
        try {
            //inicializa o manager
            em = EntityManagerFactorySingleton.getEntityManager();
            //inicia a sessao
            em.getTransaction().begin();
            //cria o objeto que vai ser persistido
            emailInformativo = new EmailInformativo();
            emailInformativo.setNome(nome);
            emailInformativo.setEmail(email);
            //Cria o DAO
            emailInformativoDAO = new EmailInformativoDAO(em);
            //Persiste o Objeto
            emailInformativoDAO.create(emailInformativo);
            //Comita a transação
            em.getTransaction().commit();

        } catch (Exception ex) {
            //Volta a transação
            em.getTransaction().rollback();
            System.out.println(ex.getStackTrace());
        } 
    }
}

Falows!!!

Criado 19 de fevereiro de 2009
Ultima resposta 19 de fev. de 2009
Respostas 2
Participantes 2