amigo, segue um exemplo do que vc quer:
primeiro eu encapsulei a classe responsável por mandar a msg do faces:
package br.com.l2pog.util;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
public class ReturnMessage {
public static final String erro = "erro";
public static final String info = "info";
public static final String alert = "alert";
public static final String criticalError = "criticalError";
public static void setMessage(String msg, String tipo) {
if (tipo.equalsIgnoreCase("erro")) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, null));
}
if (tipo.equalsIgnoreCase("info")) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO, msg, null));
}
if (tipo.equalsIgnoreCase("alert")) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_WARN, msg, null));
}
if (tipo.equalsIgnoreCase("criticalError")) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_FATAL, msg, null));
}
}
}
ou seja, add essa classe no seu projeto, para mandar exibir uma msg na tela vc teria de chamar a classe ReturnMessage.setMessage(“msg que o cara vai receber”, “tipo de erro”);
na sua camada de visão vc colocaria um método como o abaixo no seu MB:
package br.com.l2pog.controller.managedbean;
import java.io.Serializable;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.apache.commons.mail.EmailException;
import br.com.l2pog.dao.AccountDAO;
import br.com.l2pog.factory.ConnectionFactory;
import br.com.l2pog.model.Account;
import br.com.l2pog.util.EncryptPassword;
import br.com.l2pog.util.MailService;
import br.com.l2pog.util.MySession;
import br.com.l2pog.util.ReturnMessage;
@ManagedBean
@ViewScoped
public class AlterPasswordMB implements Serializable {
private static final long serialVersionUID = 1L;
private final String message = "Senha alterada com sucesso!\n";
private final String subject = "Alteração de senha L2POG";
private String password;
private String newPassword;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNewPassword() {
return newPassword;
}
public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
public void update() {
if (validateParameters()) {
try {
Connection connection = ConnectionFactory.getInstance();
try {
UserMB myUser = (UserMB) MySession.getMB("userMB",
UserMB.class);
Account acc = new Account();
acc.setLogin(myUser.getAcc().getLogin());
acc.setPassword(EncryptPassword
.encryptMyPassword(newPassword));
AccountDAO daoAcc = new AccountDAO(connection);
daoAcc.update(acc);
reportChanges(acc, myUser.getAcc().getUser().getUserMail());
password = "";
newPassword = "";
ReturnMessage.setMessage("Senha alterada com sucesso!",
"info");
} catch (SQLException e) {
ReturnMessage.setMessage("Erro ao tentar alterar a senha: "
+ e.getMessage(), "criticalError");
} catch (NoSuchAlgorithmException e) {
ReturnMessage.setMessage("Erro ao tentar alterar a senha: "
+ e.getMessage(), "criticalError");
} catch (EmailException e) {
ReturnMessage.setMessage("Senha alterada com sucesso! "
+ "Mas houve um erro ao tentar enviar o email: "
+ e.getMessage(), "alert");
} catch (Exception e) {
ReturnMessage.setMessage("Erro ao tentar alterar a senha: "
+ e.getMessage(), "criticalError");
}
} catch (SQLException e) {
ReturnMessage.setMessage(
"Erro ao estabelecer conexão para alterar senha: "
+ e.getMessage(), "criticalError");
}
}
}
}
repare que aí eu fiz exatamente o que vc está precisando, eu chamei o meu dao e no catch eu trato a exceção lançando a minha msg e informando o tipo de erro, crítico.
caso ocorra tudo bem, então eu dou uma msg de ok e coloco no formato de info.
agora na sua página xhtml vc terá algo como isso para fazer a chamada:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
</h:head>
<h:body
style="background: url('#{alterBackgroundImageMB.urlEnd}') no-repeat;">
<h:form id="formRegistro">
<p:growl id="messagesGrowl" /> <!-- esse componente é o responsável por renderizar a msg que nós colocamos no ReturnMessage.setMessage lá no MB. -->
<div style="width: 25%">
<h:panelGrid columns="2">
<h:outputText style="color:white" value="Senha:" />
<p:password value="#{alterPasswordMB.password}" maxlength="19"
minLength="4" promptLabel="Informe a senha" weakLabel="fraca"
goodLabel="média" strongLabel="forte" />
<h:outputText style="color:white" value="Nova Senha:" />
<p:password value="#{alterPasswordMB.newPassword}" maxlength="19"
minLength="4" promptLabel="Informe a senha" weakLabel="fraca"
goodLabel="média" strongLabel="forte" />
</h:panelGrid>
<p:captcha id="captcha" label="Captcha" theme="blackglass"
language="pt" requiredMessage="favor preencher o captcha"
validatorMessage="texto incorreto, preencha corretamente" />
<h:commandButton action="#{alterPasswordMB.update}" value="Cadastrar" /> <!-- aqui eu faço a chamada para o meu MB -->
</div>
</h:form>
</h:body>
</html>
repare no <p:growl id=“messagesGrowl” /> é ele o carinha que vai mostrar a sua msg.
é isso aí, colega. qualquer dúvida diga aí que lhe ajudamos. :lol: