RESOLVIDO Devo criar um bean apenas para mensagens no JSF?

14 respostas
VandersonAssis

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?

14 Respostas

tmvolpato

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?

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

VandersonAssis

Valeu cara, vou dar uma olhada!

VandersonAssis

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


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?

VandersonAssis

Por favor, alguém!!! =]

AmauriSpPoa

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);
    }
}
VandersonAssis
AmauriSpPoa:
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);
    }
}
Fala cara! E nesse caso um managedBean faria uso dessa classe para mostrar as mensagens na página?
Rodrigo_Sasaki

kira911:
Fala cara!
E nesse caso um managedBean faria uso dessa classe para mostrar as mensagens na página?

Sim.

VandersonAssis

Rodrigo Sasaki:
kira911:
Fala cara!
E nesse caso um managedBean faria uso dessa classe para mostrar as mensagens na página?

Sim.

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?

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.

VandersonAssis

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.


Estou fazendo de uma maneira parecida mesmo, assim que eu terminar mostro como fiz para a aprovação ou não rs …

VandersonAssis

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);
}
VandersonAssis

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

Obrigado a todos!

T

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:

VandersonAssis

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

Criado 12 de novembro de 2012
Ultima resposta 20 de nov. de 2012
Respostas 14
Participantes 5