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?
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 
Opa valeu pela dica cara. Me dei bem nesse esquema que já estou, mas em futuros projetos me lembrarei dele!