Comportamento estranho com JSF e Facelets e Richfaces

3 respostas
ceduardo.roque

Boa tarde pessoal, tudo bem?

Estou tendo um problema com uma aplicação simples em JSF com RichFaces e Facelets.
A aplicação tem apenas 4 text fields e dois botões.

Quando eu pressiono o botão pesquisar, um action no meu Managed Bean processa uma query no banco de dados e popula uma lista, que será renderizada por um data table.

O outro botão é um botão limpar, que apenas limpa os campos previamente preenchidos pelo usuário.

O estranho da história é que a aplicação funciona, mas DE VEZ em quando, a página não é renderizada corretamente.

O que está incorreto na renderização é que, por exemplo, se eu pressiono o botão Limpar,eu zero os valores dos componentes, conforme abaixo:

this.nome.setValue(null);
	this.nome.setSubmittedValue(null);
	this.nomeDaMae.setValue(null);
	this.nomeDaMae.setSubmittedValue(null);
	this.cpf.setValue(null);
	this.cpf.setSubmittedValue(null);
	this.dataDeNascimento.setValue(null);
	this.dataDeNascimento.setSubmittedValue(null);
	this.registros.clear();

Só que no momento da renderização do response (após a execução da ultima linha do método, que é a this.registros.clear(), os valores muitas vezes ainda estão lá.

Uma outra coisa estranha que acontece é o fato de as vezes eu pressionar o botão limpar e alguns componentes simplesmente sumirem… algo assim:

Antes de pressionar o botão:

Nome:
Nome da Mãe:
CPF:
Data de Nascimento:

Após o botão ser pressionado e a action ser executada:

Nome: Nome da Mãe:
CPF:
Data de Nascimento:

No caso anterior, é como se os componentes simplesmente nao fossem renderizados… nos logs do contêiner nao saem nada, e nem no h:messages…

O estranho que em geral funciona, só que AS VEZES isso ocorre, deixando a aplicação instável.

Estou utilizando:

JSF
Facelets
Richfaces
Tomcat 5.5

Alguém já experimentou algo parecido?

Obrigado!

ceduardo.roque

3 Respostas

T

O botão que limpa os campos é ajax ? se for de um reRender no campos de texto.
Se não for, o metodo que limpa seus campos deve retornar uma String (a String da propria pagina) ou null, caso contrario a pagina nao vai ser atualizada.

O problema dos componentes sumirem o que pode solucionar: usar h:panelGrid em vez de h:panelGroup.
Os componentes usam “binding” ?

ceduardo.roque

Tobias Pires:
O botão que limpa os campos é ajax ? se for de um reRender no campos de texto.
Se não for, o metodo que limpa seus campos deve retornar uma String (a String da propria pagina) ou null, caso contrario a pagina nao vai ser atualizada.

O problema dos componentes sumirem o que pode solucionar: usar h:panelGrid em vez de h:panelGroup.
Os componentes usam “binding” ?

Olá!

O botão que limpa o texto é um h:commandButton com um rich:ajaxSupport dentro, que re-renderiza tudo o que foi limpo…
Com relação à string de retorno da action, eu já retornei a string da página, já retornei a string “”, já mudei pra usar um action listener ao invés de action… está estranho… parece que a página simplesmente nao é atualizada… sabe? o estranho é que em 95% dos casos funciona… normal…

Já o problema dos componentes sumirem eh realmente estranho… vou tentar mudar pra panelGrid conforme voce mencionou… mas porque voce falou isso? Voce já teve algum problema parecido?

Obrigado pela resposta!

abraços!

ceduardo.roque

T

Tenta fazer assim, coloca os Campos de Texto dentro de um panelGrid e reRenderize o panelGrid, e nao os campos de texto.
Esses reRender’s não funcionam mto bem, Existem varios componentes que não podem ser reRenderizados diretamente e etc…
Colocar eles dentro de um panelGrid e reRenderziar o panelGrid resolve sempre.

Se é um ajax nao precisa retornar String, mas de qualquer forma nao retorne uma “” retorne a String da pagina (mapeada no xml) ou retorne um null.

Sim já tive problemas com o panelGroup, tanto nos reRender’s quanto ele sumir com os componentes, mas era em telas bem complexas e muito ajax.

Criado 25 de novembro de 2008
Ultima resposta 26 de nov. de 2008
Respostas 3
Participantes 2