Inicial > JSF, JSF 2.0, Primefaces, PrimeFaces, PRIMEFACES > JSF 2.0 – Enviando e-mail com Commons Mail

JSF 2.0 – Enviando e-mail com Commons Mail


Olá,

Há alguns dias me deparei com algumas questões sobre o envio/recebimento de e-mails utilizando jsf. Não vamos tentar reinventar a roda, existem APIs prontas para diversas coisas, inclusive o envio de mensagens de correio eletrônico. É o caso da Commons Mail da Apache Foundatio, uma excelente API que envia e-mails simples, com anexo, html formatado, etc.

Neste primeiro post iremos mostrar como enviar um e-mail simples(somente texto) por uma aplicação JSF 2.0 com primefaces.

Utilizamos neste exemplo as seguintes libs:

– primefaces-2.2.RC1-SNAPSHOT.jar

– commons-email-1.2.jar

Nossa organização de pacotes e pastas web ficou da seguinte forma:

Como viram acima iremos precisar, para este exemplo, apenas de um modelo, um controller e uma classe utils com alguns métodos estáticos.

Irei começar pelo modelo da mensagem, a classe Mensagem.java

public class Mensagem {

 private String destino;
 private String titulo;
 private String mensagem;

 public String getDestino() {
 return destino;
 }

 public void setDestino(String destino) {
 this.destino = destino;
 }

 public String getMensagem() {
 return mensagem;
 }

 public void setMensagem(String mensagem) {
 this.mensagem = mensagem;
 }

 public String getTitulo() {
 return titulo;
 }

 public void setTitulo(String titulo) {
 this.titulo = titulo;
 }
}

Acima, um simples modelo com títuo, a mensagem e o e-mail do destinatário. Explicarei agora como ficou a classe EmailUtils.java que segue abaixo:

public class EmailUtils {

 private static final String HOSTNAME = "smtp.gmail.com";
 private static final String USERNAME = "exemplo";
 private static final String PASSWORD = "*************";
 private static final String EMAILORIGEM = "exemplo@gmail.com";

 public static Email conectaEmail() throws EmailException {
 Email email = new SimpleEmail();
 email.setHostName(HOSTNAME);
 email.setSmtpPort(587);
 email.setAuthenticator(new DefaultAuthenticator(USERNAME, PASSWORD));
 email.setTLS(true);
 email.setFrom(EMAILORIGEM);
 return email;
 }

 public static void enviaEmail(Mensagem mensagem) throws EmailException {
 Email email = new SimpleEmail();
 email = conectaEmail();
 email.setSubject(mensagem.getTitulo());
 email.setMsg(mensagem.getMensagem());
 email.addTo(mensagem.getDestino());
 String resposta = email.send();
 FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "E-mail enviado com sucesso para: " + mensagem.getDestino(), "Informação"));
 }
}

Como vocês observam, acima coloquei quatro constantes, uma para usuario, outra senha, outra endereço do servidor smtp, outra onde você indicará o seu e-mail.

Criamos também dois métodos estáticos, para acessarmos sem precisar instanciar a classe. O método conectaEmail() conecta-se ao servidor de e-mail e retorna um objeto do tipo Email. No método enviaEmail() preenchemos o objeto Email com os dados do objeto Mensagem, que são passados como parâmetro, e depois chamamos o método email.send() para enviar o e-mail.

Para verificar erros no envio da mensagem dizemos que o método poderá lançar uma exceção EmailException e que o método que utilizá-lo deverá trata-lo, no nosso caso trataremos no controller.

Veja abaixo a classe IndexController.java

public class IndexController {

 private Mensagem mensagem = new Mensagem();

 public Mensagem getMensagem() {
 return mensagem;
 }
 public void setMensagem(Mensagem mensagem) {
 this.mensagem = mensagem;
 }

 public void enviaEmail() {
 try {
 EmailUtils.enviaEmail(mensagem);
 } catch (EmailException ex) {
 FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro! Occoreu um erro ao enviar a mensagem.", "Erro"));
 Logger.getLogger(IndexController.class.getName()).log(Level.SEVERE, null, ex);
 }
 }

 public void limpaCampos() {
 mensagem = new Mensagem();
 }

}</pre>

Através do método enviaEmail() nós chamamos o método enviaEmail(Mensagem mensagem) da classe EmailUtils.java e tratamos a Exceção lançada.

Abaixo veja a nossa view index.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:p="http://primefaces.prime.com.tr/ui"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:h="http://java.sun.com/jsf/html">
 <h:head>
 <title>Exemplo de Envio de e-mail.</title>
 <link href="#{facesContext.externalContext.requestContextPath}/resources/css/custom-theme/skin.css" rel="stylesheet" type="text/css" />
 </h:head>
 <h:body>
 <p:outputPanel id="outputPanelMail">
 <h:form>
 <p:panel header="Envio de e-mail" style="width: 550px">
 <p:messages/>
 <h:panelGrid columns="2">
 <h:outputText value="Para: "/>
 <h:inputText value="#{indexController.mensagem.destino}" size="66"/>
 <h:outputText value="Título: "/>
 <h:inputText value="#{indexController.mensagem.titulo}" size="66"/>
 <h:outputText value="Mensagem: "/>
 <h:inputTextarea value="#{indexController.mensagem.mensagem}" cols="63" rows="10"/>
 </h:panelGrid>
 <p:commandButton value="Enviar e-mail" image="ui-icon-mail-closed" action="#{indexController.enviaEmail}" update="outputPanelMail"/>
 <p:commandButton value="Limpar campos" image="ui-icon-circle-close" action="#{indexController.limpaCampos}" update="outputPanelMail"/>
 </p:panel>
 </h:form>
 </p:outputPanel>
 </h:body>
</html>

Abaixo vejam como ficou:


É isso ai pessoal, nos próximos posts mostrarei como mandar e-mail com anexo, e-mail html e como criar validadores para o e-mail.

Valeu! E até o próximo post!

  1. Paulo Adriano
    15/02/2011 às 19:23

    Olá Benigno, fiz conforme seu exemplo, compilei a aplicação sem problemas, mas quando tento enviar o email aparece um erro:

    15/02/2011 18:07:27 com.sun.faces.application.ActionListenerImpl processAction
    SEVERE: java.lang.NoClassDefFoundError: javax/mail/Message
    javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: javax/mail/Message

    Porém não dá nenhum erro quando compilo a aplicação. Você sabe o pq?

    Desde já obrigado e parabéns pelo artigo.

    • 15/02/2011 às 19:58

      Você não colocou os imports… Adicione o jar commons-email-1.2.jar

      • Paulo Adriano
        16/02/2011 às 08:38

        Eu já adicionei ao projeto o commons-email-1.2.jar. Já coloquei os imports, tanto que não dá nenhum erro de compilação. Segue minha classe:


        import br.edu.ifrr.cob.email.bean.EmailBean;
        import org.apache.commons.mail.Email;
        import org.apache.commons.mail.EmailException;
        import org.apache.commons.mail.SimpleEmail;

        public class EmailUtils {

        private static final String HOSTNAME = "smtp.gmail.com";
        private static final String USERNAME = "paulinho.adriano";
        private static final String PASSWORD = "*********";
        private static final String EMAILORIGEM = "paulinho.adriano@gmail.com";

        public static Email conectaEmail() throws EmailException {
        Email email = new SimpleEmail();
        email.setHostName(HOSTNAME);
        email.setSmtpPort(587);
        email.setAuthentication(USERNAME, PASSWORD);
        email.setTLS(true);
        email.setFrom(EMAILORIGEM);
        return email;
        }

        public static void enviaEmail(EmailBean mensagem) throws EmailException {
        Email email = new SimpleEmail();
        email = conectaEmail();
        email.setSubject(mensagem.getTitulo());
        email.setMsg(mensagem.getMensagem());
        email.addTo(mensagem.getDestino());
        String resposta = email.send();
        JsfUtil.showMessageInfo("E-mail enviado com sucesso para: " + mensagem.getDestino());
        }
        }

      • 16/02/2011 às 10:22

        Em 16/02/11 08:38,

  2. Ricardo
    21/02/2011 às 14:34

    Amigo, tenho algumas dúvidas noobs: é possível utilizar o Glassfish ou é necessário utilizar o Tomcat? Essas libs utilizadas (primefaces-2.2.RC1-SNAPSHOT.jar e
    commons-email-1.2.jar), devo colocá-las dentro da pasta lib do meu projeto ou dentro da pasta lib do Tomcat? Pq mesmo adicionando os JARs ao meu projeto no Netbeans, as classes não estão achando o caminho pra fazer todos os imports necessários (org.apache…), e etc. Se puder ajudar, agradeço.

    • 21/02/2011 às 15:56

      Estimado Ricardo, é necessário incluir as bibliotecas ao seu projeto. Caso esteja trabalhando com netbeans, clique com botao direito em biblioteca, depois adicionar jars e procure os arquivos. Após este procedimento com certeza será possivel realizar os imports.

      • Ricardo
        22/02/2011 às 01:59

        Amigo, fiz uma gambiarra, extrai as classes necessárias do arquivo commons-email-1.2-src.zip , pois qdo adicionava o ele no meu projeto, o netbeans não reconhecia e não permitia os imports. Agora consigo fazer os imports normalmente. No entanto, estou encontrando um HTTP 404 qdo executo o projeto. Tentei essa URL: http://localhost:8080/Contato/index.jsf … é necessário realizar mapeamento em algum xml, ou alguma outra configuração? Vale ressaltar que já adicionei os JARs do JSFaces. Se vc entrar em contato no meu email, te passo o projeto e vc poderia me dizer com mais clareza. Desde já agradeço.

      • 22/02/2011 às 10:49

        Erro 404, indica que a pagina nao foi encontrada. Cola aqui a configuração do teu web.xml.

      • Ricardo
        14/03/2011 às 15:55

        Amigo, está funcionando. Acabei adaptando para a versão 1.2 do JSF pois minhas outras páginas do projeto são jsp, e não xhtml, dai dava conflito. No Glassfish roda normalmente. No entanto, no Tomcat 6 estou encontrando o seguinte erro:

        at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:140)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 12, 2011 6:33:40 PM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet Faces Servlet threw exception
        java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
        at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:453)
        at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:140)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 12, 2011 6:35:32 PM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 12, 2011 6:35:41 PM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 12, 2011 8:02:32 PM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 13, 2011 8:03:26 AM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 13, 2011 8:03:49 AM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 13, 2011 11:42:59 AM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 13, 2011 7:08:41 PM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 13, 2011 9:21:13 PM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 13, 2011 9:23:12 PM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
        Mar 14, 2011 2:04:06 AM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet jsp threw exception
        java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:2122)
        at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1933)
        at org.apache.jsp.Contato_jsp._jspx_meth_f_005fview_005f0(Contato_jsp.java:125)
        at org.apache.jsp.Contato_jsp._jspService(Contato_jsp.java:102)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

        Segue meu web.xml:

        javax.faces.PROJECT_STAGE
        Development

        com.sun.faces.config.ConfigureListener

        Faces Servlet
        javax.faces.webapp.FacesServlet
        1

        Faces Servlet
        /page/*

        Resource Servlet
        org.primefaces.resource.ResourceServlet

        Resource Servlet
        /primefaces_resource/*

        index.jsp

        Se puder ajudar, agradeço.

      • benigno
        14/03/2011 às 16:29

        Amigo, teste ver o escopo do managed bean. Infelizmente ja tem um tempinho que não utilizo 1.2, ainda mais com tomcat.

  3. Rodrigo Bortolon
    25/04/2011 às 22:53

    Olá Benigno e saudações a todos !

    Estou com uma dúvida a respeito do assunto citado (envio de e-mails porém com link para uma página do meu sistema).

    A princípio, quando comecei com JSF, utilizei Richfaces em um projeto simples. Neste projeto, eu realizei praticamente tudo com ajax. Ou seja, minha página ficava com a url intacta lá … /index.jsf.
    No TCC da pós graduação, vou utilizar Primefaces. Vamos a explicação da minha dúvida. Em uma rotina do sistema que será desenvolvido, o usuário pode efetuar indicação do ponto turístico para amigos (rotina para envio de mensagem como citado neste tópico). Quando o usuário clicar no botão de ação, será enviado aos seus amigos (que ele citou no campo para) informações sobre este ponto turístico. Aí na mensagem eu gostaria de fazer um link para referenciar justamente à página que o usuário acessou sobre o ponto turístico. Alguma dica de como eu posso realizar este procedimento? Seria com passagem de parâmetro como por exemplo index.jsf?link=xyz…. ?

    Grato,
    Rodrigo Bortolon

    • Benigno Sales
      02/05/2011 às 12:57

      Rodrigo,

      Você pode passar o parametro via GET, ou seja, explicitamente na url. Desta forma você pegaria no backing bean o objeto pegando o request, como abaixo:

      http://www.quebrandoparadigmas.com/index.jsf?obejto=1

      public static HttpServletRequest request() {
      ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
      HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
      return request;
      }

      public static String getParamenter(String paramName) {
      return request().getParameter(paramName);
      }

      String param = getParamenter(“objeto”);

      no objeto param você terá o valor 1.

      tenta isso :p

      • Rodrigo Bortolon
        04/05/2011 às 08:56

        Olá Benigno,

        Obrigado pela resposta! Vou implementar no projeto.

        Sds,
        Rodrigo Bortolon

      • Rodrigo Bortolon
        04/05/2011 às 09:33

        Ah, esqueci de comentar um detalhe. Neste caso, eu vou deixar de ter a url do meu sistema, fixa como exemplo http://www.teste.com/index.jsf ou http://www.teste.com certo? No momento que o usuário clicar no link (com o parametro via GET), a pagina ira abrir com este endereço e não terei mais a padronização http://www.teste.com/index.jsf ou http://www.teste.com correto? Não há como fixar isso e a abrir a url com get em background até onde eu sei. Corrija-me se estiver errado. O ideal era permanecer sempre com a mesma url mas nesse caso acho que não há como.

        Sds,
        RB

  4. 23/08/2011 às 09:59

    Olá amigo ! primeiramente parabéns pelo blog ! tira muitas dúvidas da gente ! mas gostaria de saber como vai ficar o arquivo web.xml da plicação depois de tudo isso adicionado na aplicação. poderia postar o código pra gente? e melhor , poderia fazer um tutorial ensinando a configurar o arquivo web.xml? na web não tem exemplos(pelo menos não vi ainda.) Valew Benigno .

  5. Pontin
    07/11/2011 às 14:19

    Excelente post, só em caso de duvida se alguem passe por isso!
    No meu caso foi necessario baixar a biblioteca mail.jar…

  6. Pontin
    07/11/2011 às 14:22

    Uma duvida, postou algum exemplo com e-mail com anexo, e-mail html, como falou no final do post?!

  7. rayckson arujo
    15/09/2012 às 20:14

    Parabéns pelo post, e muito obrigados. Funciona perfeito! Como diz o Wilker Noleto tem um estagiário no Sebrae que é teu fan… kkkkkkk

  8. 28/01/2013 às 13:34

    Fala meu caro, tudo certo??

    Não estou conseguindo ver como fica a estrutura do código, pq não carrega as imagens e diz que o seu servidor está indisponível. Será que tem como disponibilizar ai pra gente?

    E outra coisa, como base neste exemplo consigo enviar e-mails através do servidor Exchange?
    Pois meu servidor que irei utilizar é Exchange.

    Obrigado desde já.

  9. Thiago Correa
    25/07/2013 às 12:08

    Cara, meu projeto esta redondinho, porem na hora que ele carrega a página ele me apresenta        ……é bem estranho!!. Alguém pode me ajudar?

  10. JADERSON
    31/10/2013 às 02:28

    AMIGO VC E DEMAIS , FUNCIONO DIREITINHOOOOO….. EU JA TINHA FEITO 2 VEZES E NAO TINHA DADO CERTO…. VC É DEMAIS MUITO OBRIGADO !!!!!

  1. No trackbacks yet.

Deixe um comentário