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!
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.
Você não colocou os imports… Adicione o jar commons-email-1.2.jar
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());
}
}
Em 16/02/11 08:38,
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.
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.
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.
Erro 404, indica que a pagina nao foi encontrada. Cola aqui a configuração do teu web.xml.
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.
Amigo, teste ver o escopo do managed bean. Infelizmente ja tem um tempinho que não utilizo 1.2, ainda mais com tomcat.
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
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
Olá Benigno,
Obrigado pela resposta! Vou implementar no projeto.
Sds,
Rodrigo Bortolon
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
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 .
Excelente post, só em caso de duvida se alguem passe por isso!
No meu caso foi necessario baixar a biblioteca mail.jar…
Uma duvida, postou algum exemplo com e-mail com anexo, e-mail html, como falou no final do post?!
Não postei.
Parabéns pelo post, e muito obrigados. Funciona perfeito! Como diz o Wilker Noleto tem um estagiário no Sebrae que é teu fan… kkkkkkk
E ai grande Rayckson, tudo bem? É um prazer ajudar, abraço!
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á.
Cara, meu projeto esta redondinho, porem na hora que ele carrega a página ele me apresenta        ……é bem estranho!!. Alguém pode me ajudar?
AMIGO VC E DEMAIS , FUNCIONO DIREITINHOOOOO….. EU JA TINHA FEITO 2 VEZES E NAO TINHA DADO CERTO…. VC É DEMAIS MUITO OBRIGADO !!!!!