bom ai vai uma classe utilitaria que faz isso:
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
/**
* Faces utils Class.
*
* @since 24/03/2010
*
*/
public abstract class FacesUtils {
/**
* Add information message.
*
* @param msg
* the information message
*/
public static void addInfoMessage(String msg) {
addInfoMessage(null, msg);
}
/**
* Add information message to a sepcific client.
*
* @param clientId
* the client id
* @param msg
* the information message
*/
public static void addInfoMessage(String clientId, String msg) {
addMessage(FacesMessage.SEVERITY_INFO, clientId, msg);
}
/**
* Add error message.
*
* @param msg
* the error message
*/
public static void addErrorMessage(String msg) {
addErrorMessage(null, msg);
}
/**
* Add error message to a sepcific client.
*
* @param clientId
* the client id
* @param msg
* the error message
*/
public static void addErrorMessage(String clientId, String msg) {
addMessage(FacesMessage.SEVERITY_ERROR, clientId, msg);
}
public static void addInfoMessageById(String messageId) {
addInfoMessageById(messageId, null);
}
public static void addInfoMessageById(String messageId, Object params[]) {
addMessageById(FacesMessage.SEVERITY_INFO, messageId, params);
}
public static void addErrorMessageById(String messageId) {
addErrorMessageById(messageId, null);
}
public static void addErrorMessageById(String messageId, Object params[]) {
addMessageById(FacesMessage.SEVERITY_ERROR, messageId, params);
}
/**
* Add default message method.
*
*/
private static void addMessage(Severity facesMessage, String clientId,
String msg) {
FacesContext.getCurrentInstance().addMessage(clientId,
new FacesMessage(facesMessage, msg, msg));
}
/**
* Add default message by Id method.
*
* @date 24/03/2010
*
* @param severity
* @param messageId
* @param params
*/
private static void addMessageById(Severity severity, String messageId,
Object params[]) {
FacesContext.getCurrentInstance().addMessage(null,
getMessage(messageId, params, severity));
}
/**
* Find and specific message.
*
* @param messageId
* @param params
* @param severity
* @return the Faces Message
*/
public static FacesMessage getMessage(String messageId, Object params[],
Severity severity) {
FacesContext facesContext = FacesContext.getCurrentInstance();
String bundleName = facesContext.getApplication().getMessageBundle();
if (bundleName != null) {
String summary = null;
String detail = null;
Locale locale = facesContext.getViewRoot().getLocale();
ResourceBundle bundle = ResourceBundle.getBundle(bundleName,
locale, getCurrentClassLoader(params));
try {
summary = bundle.getString(messageId);
detail = bundle.getString(messageId + "_detail");
} catch (MissingResourceException ex) {
}
if (summary != null) {
MessageFormat mf = null;
if (params != null) {
mf = new MessageFormat(summary, locale);
summary = mf.format(params, new StringBuffer(), null)
.toString();
}
if (detail != null && params != null) {
mf.applyPattern(detail);
detail = mf.format(params, new StringBuffer(), null)
.toString();
}
return (new FacesMessage(severity, summary, detail));
}
}
return new FacesMessage(severity, "<<< " + messageId + " >>>", null);
}
/**
* Returns the currente class loader.
*
* @param defaultObject
* @return
*/
protected static ClassLoader getCurrentClassLoader(Object defaultObject) {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (loader == null) {
loader = defaultObject.getClass().getClassLoader();
}
return loader;
}
/**
* Busca o atributo da acao.
*
* @param <T>
* @param event
* evento do JSF
* @param name
* attribute name
* @param classType
* type from class.
* @return Attributo ou null caso nao encontre.
* @since 20/04/2010
*/
public static <T extends Serializable> T getActionAttribute(
ActionEvent event, String name, Class<T> classType) {
T type = null;
Object obj = event.getComponent().getAttributes().get(name);
if (obj != null) {
type = classType.cast(obj);
}
return type;
}
/**
* Retorna o parametro em String
*
* @param event
* @param name
* @return Parametro em String
*/
public static String getActionAttribute(ActionEvent event, String name) {
return (String) event.getComponent().getAttributes().get(name);
}
/**
* Busca o parametro da requisicao.
*
* @param name
* @return the request parameter or null if not found.
*/
public static String getRequestParameter(String name) {
return FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get(name);
}
/**
* Seta um valor no mapa da sessao
*
* @param key
* @param value
*/
public static void setSessionMapValue(String key, Object value) {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
.put(key, value);
}
/**
* Busca o Valor no mapa da sessao.
*
* @param key
* @return the value from session map.
*/
public static Object getSessionMapValue(String key) {
return FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().get(key);
}
/**
* Remove o Valor do mapa da sessao.
*
* @param key
* @return the object removed.
*/
public static Object removeSessionMapValue(String key) {
return FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().remove(key);
}
/**
* Returns the key from User if there are an FacesContext
*
* @return the key from user or null if not found or the don´t exists an
* current thread from FacesContext.
*/
public static String getKeyOfUserInSession() {
String userKey = null;
FacesContext fc = FacesContext.getCurrentInstance();
if (fc != null) {
userKey = fc.getExternalContext().getUserPrincipal().getName();
}
return userKey;
}
}
use assim:
try{
....
faz alguma coisa mto complexa
} catch (Exception e) {
//FacesUtils.addErrorMessage("sua mensagem personalizada aki!");
FacesUtils.addErrorMessage(e.getMessage());
}