JSF - reRender não funciona  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

Fala feras

Tenho um reRender que deveria renderizar um painel que contem um div e um dataTable. Usei o a4j:commandButton e não resolveu.





O estranho é não dar nenhuma exceção e os dados são buscados corretamente. O que pode estar ocorrendo?

Abs
thiagowig
Debugger
[Avatar]

Membro desde: 16/07/2009 11:42:38
Mensagens: 68
Localização: Belo Horizonte
Offline

Confira no html gerado se o componente horariosRegistrados não foi renomeado com o nome do form.


Ex: form:horariosRegistrados

This message was edited 1 time. Last update was at 05/01/2010 14:48:52

thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

Use



para ver se há algo de errado!

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
rponte
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline

Olá thiagowig,

Respondendo de uma maneira direta, você não pode reRenderizar um componente na qual possua o atributo rendered dinâmico, ou seja, ele não pode possuir EL para definir seu estado. No seu caso, o componente a4j:outputPanel.

Para resolver isso reRenderize o componente pai do a4j:outputPanel. Lembrando que este componente pai não pode ter o atributo rendered dinâmico, ou seja, ele sempre precisa ser renderizado.

Abraços e boa sorte.

Rafael Ponte
http://www.rponte.com.br/
[WWW]
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

Se eu der um F5 na tela, ele carrega o que deveria ser exibido via ajax.

Não tem mensagem de erro no ajax.
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

rponte wrote:Olá thiagowig,

Respondendo de uma maneira direta, você não pode reRenderizar um componente na qual possua o atributo rendered dinâmico, ou seja, ele não pode possuir EL para definir seu estado. No seu caso, o componente a4j:outputPanel.

Para resolver isso reRenderize o componente pai do a4j:outputPanel. Lembrando que este componente pai não pode ter o atributo rendered dinâmico, ou seja, ele sempre precisa ser renderizado.

Abraços e boa sorte.


Boa rponte, problema resolvido
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

rponte,

e se eu quiser usar um rendered dinamico? não tem como usar com o reRender?
renanreismartins
GUJ Ranger
[Avatar]

Membro desde: 19/09/2007 15:19:38
Mensagens: 807
Localização: São Paulo - SP
Offline

@rponte parabens pela contribuiçao!!

realmente sua afirmação procede, sofri muito com este problema e o corrigia da maneira que vc citou, porem ninguem nunca soube me explicar o "pq".

Poderia informar a fonte dessa informação ?

ah parabens pelo blog

grande abrasssssss

http://renanreismartins.blogspot.com/ - Para apaixonados por desenvolvimento de software
[WWW] [MSN]
rponte
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline

Oi padcoe,
padcoe wrote:rponte,
e se eu quiser usar um rendered dinamico? não tem como usar com o reRender?


Você pode usar sim um rendered dinâmico e ao mesmo tempo utilizar o reRender após um evento para "repintar" este mesmo componente. Mas isso provavelmente falhará quando o componente sumir (rendered=false). Enquanto o rendered for avaliado como true você não terá este problema. Por isso o ideal é evitar este cenário e sempre "repintar" um componente pai qualquer. No caso do Richfaces o a4j:outputPanel é uma excelente escolha como componente pai, caso contrário um h:panelGroup resolve.

Rafael Ponte
http://www.rponte.com.br/
[WWW]
rponte
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline

Olá renanreismartins,
renanreismartins wrote:@rponte parabens pela contribuiçao!!

realmente sua afirmação procede, sofri muito com este problema e o corrigia da maneira que vc citou, porem ninguem nunca soube me explicar o "pq".

Poderia informar a fonte dessa informação ?

ah parabens pelo blog

grande abrasssssss


Vou tentar explicar o motivo, espero que fique claro.

Não é interessante tentar reRenderizar um componente com rendered dinâmico pois quando o atributo rendered é avaliado para false o componente (código XHTML) não aparece na árvore DOM da página. Sendo, após um evento AJAX o código JavaScript do Richfaces responsável por atualizar o bloco de código (onde se encontraria o componente) não consegue achar a posição exata para reRenderizar na página, já que o código XHTML do componente não existe na árvore DOM. Então no final ele acaba simplesmente não fazendo nada.

Por isso, quando você reRenderiza um componente pai qualquer (que sempre tem rendered avaliado para true) o Richfaces consegue encontrar a posíção exata da página, e como o componente com rendered dinâmico é um nó (filho) do componente pai ele também é "repintado".

Enfim, tudo ocorre normalmente no lado servidor. O problema mesmo ocorre no lado cliente (browser). Você pode observar isso com o Firebug, se achar necessário.
Espero que tenha ficado claro.

Sobre a fonte da informação, eu estou quase certo que eu li na documentação do Richfaces. Lá ele explica exatamente este cenário. Se não me engano, a documentação do Trinidad também comenta sobre isso. Ou seja, é um problema recorrente com vários, se não todos, os conjuntos de componentes AJAX.

Abraços.

Rafael Ponte
http://www.rponte.com.br/
[WWW]
rponte
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline

Aproveitando, acabei achando alguns trechos na documentação do Richfaces:

Aqui (Topico 5.5):
"Any Ajax framework should not append or delete, but only replace elements on the page. For successful updates, an element with the same ID as in the response must exist on the page. If you'd like to append any code to a page, put in a placeholder for it (any empty element). For the same reason, it's recommended to place messages in the "AjaxOutput" component (as no messages is also a message). "


E aqui (Topico 5.6.1):
"Most common problem with using reRender is pointing it to the component that has a "rendered" attribute. Note, that JSF does not mark the place in the browser DOM where the outcome of the component should be placed in case the "rendered" condition returns false. Therefore, after the component becomes rendered during the Ajax request, RichFaces delivers the rendered code to the client, but does not update a page, because the place for update is unknown. You need to point to one of the parent components that has no "rendered" attribute. As an alternative, you can wrap the component with <a4j:outputPanel> layout="none" . "


Enfim, espero que ajude.

Rafael Ponte
http://www.rponte.com.br/
[WWW]
fabio_ajm
Thread.start()

Membro desde: 28/04/2009 19:21:18
Mensagens: 34
Localização: Taubaté
Offline

Estou com um problema sera que alguém pode dar uma luz, quando dou um reRender no outputPane o inputText não funciona, não pega os dados digitados, o codigo seguinte é uma parte do codigo



* Sun Certified Java Programmer 6
Bacharel em Computação Aplicada

[MSN]
donny
JavaTeenager
[Avatar]

Membro desde: 16/03/2009 09:35:54
Mensagens: 156
Offline

Jogue o <a4j:outputPanel id="pl" > dentro de um <h:panelGroup> que resolve.

Donizete Waterkemper
[Email] [MSN]
rponte
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline

Depois de muito tempo sem blogar eu acabei tirando um post sobre o assunto da minha lista de drafts, http://www.rponte.com.br/2010/12/01/problema-do-rendered-dinamico-com-jsf/ .

Espero que com o post o problema e a solução fiquem mais claros.

Um abraço.

Rafael Ponte
http://www.rponte.com.br/
[WWW]
mrbbm
JavaChild

Membro desde: 16/12/2009 14:49:58
Mensagens: 125
Offline

rponte, é isso mesmo!
Certas coisas a gente tem idéia ou sabe, mas as vezes deixa de responder a um colega ou não, acaba respondendo mas sem se expressar devidamente.
Você foi bem claro!
O post no blog ficou ótimo tmb.

Agora só falta algum modera marcar como "resolvido".

This message was edited 1 time. Last update was at 03/05/2011 13:23:51

 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team