RESOLVIDO Devo criar um bean apenas para mensagens no JSF?

Pessoal estou desenvolvendo uma rede social e estou com essa dúvida.
Seria uma má prática eu criar um bean para mostrar as mensagens de erro nas páginas xhtml?
O que pensei é criar esse bean, e sempre fazer chamadas nele via ajax para atualizar o componente que contém a mensagem.

OBS: Eu sei que existe o componente messages do JSF mas não sou muito acostumado a usa-lo. Seria melhor eu usar ele?

[quote=kira911]Pessoal estou desenvolvendo uma rede social e estou com essa dúvida.
Seria uma má prática eu criar um bean para mostrar as mensagens de erro nas páginas xhtml?
O que pensei é criar esse bean, e sempre fazer chamadas nele via ajax para atualizar o componente que contém a mensagem.

OBS: Eu sei que existe o componente messages do JSF mas não sou muito acostumado a usa-lo. Seria melhor eu usar ele?[/quote]

O que se faz é criar uma classe que contenha todos os tipos de facesMessage
e onde for usar é só chamar essa Classe e o tipo dela

INFO
WARN
ERROR
FATAL

é só procurar no google FacesMessageUtil

Att

Valeu cara, vou dar uma olhada!

[quote=tmvolpato]O que se faz é criar uma classe que contenha todos os tipos de facesMessage
e onde for usar é só chamar essa Classe e o tipo dela

INFO
WARN
ERROR
FATAL

é só procurar no google FacesMessageUtil

Att [/quote]
Cara to procurando, mas não achei nada que me fizesse entender como criar essa classe.
Alguém pode me dizer um pouco mais sobre ela por favor?

Por favor, alguém!!! =]

Acho que eles estão se referindo a algo como o código abaixo.

package br.com.guj.mb.util;

import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

public class JsfUtil {

    public static void addErrorMessage(Exception ex, String defaultMsg) {
        String msg = ex.getLocalizedMessage();
        if (msg != null && msg.length() > 0) {
            addErrorMessage(msg);
        } else {
            addErrorMessage(defaultMsg);
        }
    }

    public static void addErrorMessages(List<String> messages) {
        for (String message : messages) {
            addErrorMessage(message);
        }
    }

    public static void addErrorMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
        FacesContext.getCurrentInstance().addMessage(null, facesMsg);
    }

    public static void addSuccessMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
        FacesContext.getCurrentInstance().addMessage("successInfo", facesMsg);
    }
}

[quote=AmauriSpPoa]Acho que eles estão se referindo a algo como o código abaixo.

[code]
package br.com.guj.mb.util;

import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

public class JsfUtil {

public static void addErrorMessage(Exception ex, String defaultMsg) {
    String msg = ex.getLocalizedMessage();
    if (msg != null && msg.length() > 0) {
        addErrorMessage(msg);
    } else {
        addErrorMessage(defaultMsg);
    }
}

public static void addErrorMessages(List<String> messages) {
    for (String message : messages) {
        addErrorMessage(message);
    }
}

public static void addErrorMessage(String msg) {
    FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
    FacesContext.getCurrentInstance().addMessage(null, facesMsg);
}

public static void addSuccessMessage(String msg) {
    FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
    FacesContext.getCurrentInstance().addMessage("successInfo", facesMsg);
}

}
[/code][/quote]
Fala cara!
E nesse caso um managedBean faria uso dessa classe para mostrar as mensagens na página?

[quote=kira911]Fala cara!
E nesse caso um managedBean faria uso dessa classe para mostrar as mensagens na página?[/quote]
Sim.

[quote=Rodrigo Sasaki][quote=kira911]Fala cara!
E nesse caso um managedBean faria uso dessa classe para mostrar as mensagens na página?[/quote]
Sim.[/quote]

public static void addErrorMessage(Exception ex, String defaultMsg) {  
        String msg = ex.getLocalizedMessage();  
        if (msg != null && msg.length() > 0) {  
            addErrorMessage(msg);  
        } else {  
            addErrorMessage(defaultMsg);  
        }  
    }  

Opa!
Me diz mais uma coisa por favor. Nesse código acima de onde eu pegaria essa exception passada em parametro?
E outra coisa, essa String defaultMsg seria a mensagem que eu queira que seja mostrada é isso?

Vamos supor que no seu ManagedBean tenha um método save

public void save(){
        try {
          //aqui chama um DAO que salva
        } catch (Exception e) {
             JsfUtil.addErrorMessage(e,"Mesnsagem padão ");
        }
}

Essa mensagem vai ser enviada para o usuário.

[quote=AmauriSpPoa]Vamos supor que no seu ManagedBean tenha um método save

public void save(){
        try {
          //aqui chama um DAO que salva
        } catch (Exception e) {
             JsfUtil.addErrorMessage(e,"Mesnsagem padão ");
        }
}

Essa mensagem vai ser enviada para o usuário.[/quote]
Estou fazendo de uma maneira parecida mesmo, assim que eu terminar mostro como fiz para a aprovação ou não rs …

Então no IF abaixo confiro se a identificação do aluno é valida, se sim beleza. Se não ele chamara o addErrorMessage dessa classe que criei, passando o local que deu o erro e a mensagem à ser exibida.
Seria essa uma boa forma? Aqui funfou mas não sei se é a melhor forma. O que acham?

if(identificacaoDao.isIdentificationValid(alunoTb.getRaAluno()) == false) {
	System.out.println("\n\nO RA é inválido!!! em alunoTbMB.cadastraUsuario\n\n");
	JsfMessages.addErrorMessage("formularioCadastro:raFormularioCadastro", "Ra inválido!");
	return "#";
}
public static void addErrorMessage(String local, String msg) {
	FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
	FacesContext.getCurrentInstance().addMessage(local, facesMsg);
}

Ok, vou aceitar o silêncio como um YOU’RE RIGHT BOY!

Obrigado a todos!

Olá, se vc tiver interessado em usar o seam na sua aplicação, ele tem muitas facilidades, inclusive pra mensagens. Dá uma olhadinha aqui http://docs.jboss.org/seam/3/faces/latest/reference/en-US/html/faces.messages.html#adding

Resumindo é só isso:

@Inject
Messages messages;

public void acao(){

messages.info("Operação realizada com sucesso");

}

ou ainda usar uma BundleKey caso queira intercionalizar :wink:

Opa valeu pela dica cara. Me dei bem nesse esquema que já estou, mas em futuros projetos me lembrarei dele!