Exception jsf

2 respostas
J

oi pessoal

queria ter uma noção de como eu posso fazer usando JSF o seguinte cenario:

dentro da minha logica, quero lancar uma exception com uma mensagem especifica. E essa exception voltar na minha tela.

Por exemplo

public void getMetodo1()
{
    if(logicaCerta)
    {
       //executa os comandos normalmente
    }
    else
    {
       throw new Exception("MENSAGEM QUE IRIA PRA TELA");
     }
}

Como eu faria para essa mensagem da exception pudesse aparecer no h:message do jsf?

valeu

2 Respostas

L

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());
		}
R

O que o lgweb mandou, é uma classe útil com varias funçõezinhas interessantes

Mas se vc não quiser usa-la, basta utilizar…

FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, "sua menagem", null));

…para adicionar uma mensagem na fila de mensagens a serem exibidas por um h:messages ou rich:messages

no seu caso, que é na exception seria

try {
} catch (Exception e) {
    FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null));
}
Criado 29 de agosto de 2010
Ultima resposta 31 de ago. de 2010
Respostas 2
Participantes 3