addMessage na fase RENDER_RESPONSE do JSF

6 respostas
R

Pessoal, estou com um problema que é o seguinte, eu tenho um método no Managed Bean que vai retornar a lista para montar um combo. Se der erro nesse método eu adiciono uma mensagem, so que ela não aparece na tela.
Eu imagino que seja porque o método é executado na fase de renderização.

É isso mesmo? Existe alguma alterantiva?

parace um problema semelhante a esse, que não teve resposta:
http://www.guj.com.br/posts/list/100167.java

Valeu.

6 Respostas

T
FacesContext context = FacesContext.getCurrentInstance();
FacesMessage fm = new FacesMessage(severity, msg, detail);
context.addMessage(id, fm);

EDIT: No Jedi tem uma explicação bem legal disso ai no curso de JSF!

http://www.dfjug.org/DFJUG/jedi/index.jsp

R

Sim eu adiciono a mensagem dessa forma que você mostrou. Porém nesse caso específico com combo ela não aparece.

T

mas não é pra usar com combo que isso serve.

R

Beleza, é exatamente isso que eu quero saber, como enviar uma mensagem nesse caso (não só combo).

o meu código é mais ou menos assim:

<h:messages id="message" globalOnly="true" layout="table" showDetail="true" />

<h:selectOneMenu id="combo" value="#{bean.codigoCombo}" required="true">
    <f:selectItems value="#{bean.montaCombo}"/>
</h:selectOneMenu>
public List<SelectItem> getMontaCombo() {

    //codigo para montar o combo...

    //se deu erro
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Erro ao montar combo.")); 
}

Abraços.

R

Então pessoal, alguém teria uma dica para em dar?

Parece um problema comum, então alguém já deve ter passado por isso.

Obrigado.

rponte

O problema é que seu método é chamado na fase de RENDER_RESPONSE, e as mensagens de erros já foram renderizadas antes da chamada do método pois o componente h:messages foi inserido antes.

Dá uma olhada aqui,
http://www.martinahrer.at/blog/2008/03/05/keep-rich-faces-modal-panel-open-when-form-validation-errors-occur/

Abraços e boa sorte.

Criado 18 de novembro de 2008
Ultima resposta 2 de dez. de 2008
Respostas 6
Participantes 3