Bom dia a todos,
Não estou conseguindo informar a mensagem estou fazendo algo errado ? Não da erro no console e quando coloco para debugar ele passa
pela mensagem sem dar erro.
if (gerencia.getId_gerencia() == null ){
dao.adiciona(gerencia);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Gerência cadastrada com sucesso!"));
} else {
dao.atualiza(gerencia);
}
você colocou na tela o componente para mostrar a mensagem ?
Não está errado, mas atente para isso:
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Chamada deve ter no mínimo 10 caracteres.", "Chamada deve ter no mínimo 10 caracteres."));
1° - Você está com o componente <p:messages configurado na página?
2° - Você está dando update no form aonde está o messages ou deixou-o com autoUpdate=“true”?
como está a sua estrutura de form?>
[code]<?xml version="1.0" encoding="ISO-8859-1" ?>
<ui:composition template="/_template_geral.xhtml">
<ui:define name="corpo">
<h:form id="gerencia">
<p:fieldset legend="Cadastro de Gerência">
<p:messages />
<h:panelGrid columns="2">
<h:outputLabel value="ID:"
rendered="#{gerenciaBean.gerencia.id_gerencia != null}" />
<h:inputText
value="#{gerenciaBean.gerencia.id_gerencia}"
readonly="true"
rendered="#{gerenciaBean.gerencia.id_gerencia != null}" />
<h:outputLabel value="Nome Gerência: " for="nome" />
<h:inputText id="nome"
value="#{gerenciaBean.gerencia.nomeGerencia}"
required="true" requiredMessage="Nome da gerência obrigatorio!" />
<h:outputLabel value="Descrição:" for="descricao" />
<h:inputTextarea id="descricao"
value="#{gerenciaBean.gerencia.desc_gerencia}"
required="true" requiredMessage="Descrição obrigatorio!" />
</h:panelGrid>
<h:commandButton value="Salvar"
action="#{gerenciaBean.gravar}" />
</p:fieldset>
</h:form>
</ui:define>
</ui:composition>
[/code]
[code]
DAO dao = new DAO(Gerencia.class);
if (gerencia.getId_gerencia() == null ){
dao.adiciona(gerencia);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Gerência cadastrada com sucesso!", "Gerência cadastrada com sucesso!"));
} else {
dao.atualiza(gerencia);
}[/code]
esse é o problema então, primeiro, tu está utilizando o h:commandButton, para fazer o refresh parcial tu tem que usar o p:commandButton
no teu p:messages tu pode deixar assim:
<p:messages autoUpdate="true"/>
e já deve resolver o caso
Fiz as devidas alterações e continua não aparecendo.
[code] public String gravar() {
DAO<Gerencia> dao = new DAO<Gerencia>(Gerencia.class);
if (gerencia.getId_gerencia() == null ){
dao.adiciona(gerencia);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Gerência cadastrada com sucesso!",
"Gerência cadastrada com sucesso!"));
} else {
dao.atualiza(gerencia);
}
gerencias = new DAO<Gerencia>(Gerencia.class).listaTodos();
this.gerencia = new Gerencia();
return "gerencia?faces-redirect=true";
}
[/code]
O problema por não aparecer pode ser que após a gravação eu retorno para a mesma pág. ?
trocou:
<h:commandButton value="Salvar"
action="#{gerenciaBean.gravar}" />
por
<p:commandButton value="Salvar"
actionListener="#{gerenciaBean.gravar}" ajax="true" />
?
Vou fazer as devidas alterações, porque estava deixando somente com o action e não com o actionListener.
Eu tentei usar um componente usando o ActionListener para poder aparecer um growl mais não funfou, eu preciso de algum .jar para aparecer as mensagens do faces? Pois estava vendo em um outro topico que em uma determinada ocasião ele precisou utilizar esses dois .jar el-api.jar e el-impl.jar, mais vem a ser meu caso utilizalos?
Então galera,
Estou tentando fazer um teste simples. Esta tudo mapeado corretamento e quando tento fazer o texto do componente da este erro.
Caused by: javax.el.PropertyNotFoundException: /teste.xhtml @13,115 actionListener="#{testeBean.testar}": Target Unreachable, identifier 'testeBean' resolved to null
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:100)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
... 28 more
Pode ser por falta de algum .jar?
Então galera depois de quebrar um pouco a cabeça eu consegui resolver, talvez não seja da forma coerente (boas praticas) mais resolvendo
talvez seja o que importa, seguem o codigo.
view:
[code]
<ui:composition template="/_template_geral.xhtml">
<ui:define name="corpo">
<h:form id="gerencia">
<p:fieldset legend="Cadastro de Gerência">
<p:messages id="teste" />
<h:panelGrid columns="2">
<h:outputLabel value="ID:"
rendered="#{gerenciaBean.gerencia.id_gerencia != null}" />
<h:inputText
value="#{gerenciaBean.gerencia.id_gerencia}"
readonly="true"
rendered="#{gerenciaBean.gerencia.id_gerencia != null}" />
<h:outputLabel value="Nome Gerência: " for="nome" />
<h:inputText id="nome"
value="#{gerenciaBean.gerencia.nomeGerencia}"
required="true" requiredMessage="Nome da gerência obrigatorio!" />
<h:outputLabel value="Descrição:" for="descricao" />
<h:inputTextarea id="descricao"
value="#{gerenciaBean.gerencia.desc_gerencia}"
required="true" requiredMessage="Descrição obrigatorio!" />
</h:panelGrid>
<p:commandButton value="Salvar"
action="#{gerenciaBean.gravar}" ajax="false"/>
</p:fieldset>
</h:form>
</ui:define>
</ui:composition>
[/code]
Bean:
[code] public String gravar() {
DAO<Gerencia> dao = new DAO<Gerencia>(Gerencia.class);
if (gerencia.getId_gerencia() == null ){
dao.adiciona(gerencia);
FacesContext.getCurrentInstance().addMessage(":gerencia:teste", new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces rocks!"));
} else {
dao.atualiza(gerencia);
}
gerencias = new DAO<Gerencia>(Gerencia.class).listaTodos();
this.gerencia = new Gerencia();
return "gerencia";
}[/code]
Mais uma vez obrigado a galera que ajudou e ao blog em si.