Tentei usar os atributos “action” e “actionListener” ao mesmo tempo num h:commandButton, mas deu erro. O action eu tenho que usar para navegação à próxima página, e o actionListener eu uso para mostrar a mensagem de erro caso não satisfaça uma condição. Tentei colocar a mensagem do faces no método do managedbean que é chamado pela action, mas não mostra a mensagem de aviso na página… Há algum outro modo de se fazer isso?
JSF2: usar action e actionListener ao mesmo tempo no h:commandButton?
3 Respostas
Olá, você pode declarar la em cima da sua pagina depois da ou onde vc quiser que ela apreça ^^
<h:messages/>
e na sua bean, você retorna uma faces messages e ela vai aparecer na pagina.
pagina.xhtml
MBean.java
<h:form>
<h:messages globalOnly="true" showDetail="true"/>
Nome: <h:inputText value="#{MBean.nome}"/>
<h:commandButton value="Enviar" action="#{MBean.salvar}/>
</h:form>
...
private String nome;
//gets e sets
public String salvar() {
if( !(nome.equals("")) ) { //Se o nome for diferente de ""
//continua com cadastro.
//return "listagem";
}
FacesContext ctx = FacesContext.getCurrentInstance();
ctx.addMessage(null, new FacesMessage("Mensagem a ser exibida"); //não lembro bem os construturos do FacesMessage, tem que conferir.
return "pagina";
}
Cara, acho que ta certinho, fiz tudo aqui direto no editor do forum mesmo, mas desse jeito quando o usuário clicar em salvar
o bean vai verificar se existe algo digitado em "nome", se não estiver ele adiciona uma mensagem ao contexto e reexibe o formulário com a mensagem.
Da pra fazer com ajax também, ai sim seria necessário utilizar o actionListener.
Abraços...
Tive que fazer uma certa gambiarra: usei actionListener no commandButton, só que o método no managed bean ficou algo assim:
public void acao(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
...
//redireciona navegação
NavigationHandler handler =context.getApplication()
.getNavigationHandler();
handler.handleNavigation(context, null, "proximaPagina");
context.renderResponse();
...
//mandando mensagem de erro na tela
context.addMessage(null,new FacesMessage("Ocorreu um erro!!!"));
}
Criado 9 de fevereiro de 2011
Ultima resposta 10 de fev. de 2011
Respostas 3
Participantes 3