[RESOLVIDO]t:selectOneMenu + a4j:support + Datatable  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
w1l14n
JavaBaby
[Avatar]

Membro desde: 11/07/2008 09:36:13
Mensagens: 92
Offline

Pessoal,

Mais uma vez venho solicitar ajuda.

Até encontrei problemas semelhantes... mas as soluções apresentadas eu não consegui resolver.

Meu objetivo é quando selecionar uma opção do comboBox, recarregar a tabela.

O meu problema é que quando o método que recarrega é chamada o valor do idCargo está sempre nulo.

Abaixo o código:

This message was edited 1 time. Last update was at 19/08/2009 16:43:18


Java Rules!
SCJP 5
SCWCD 5
diegopctba
Debugger

Membro desde: 23/05/2008 15:56:15
Mensagens: 50
Localização: Curitiba
Offline

Cara, tenta retirar o atributo immediate na linha 3.
w1l14n
JavaBaby
[Avatar]

Membro desde: 11/07/2008 09:36:13
Mensagens: 92
Offline

Retirei e tbm não funcionou.

Alias qdo estou depurando, todo os atributos do meu Bean chegam com valores null.

This message was edited 1 time. Last update was at 18/08/2009 17:01:21


Java Rules!
SCJP 5
SCWCD 5
diegopctba
Debugger

Membro desde: 23/05/2008 15:56:15
Mensagens: 50
Localização: Curitiba
Offline

Normalmente eu uso da seguinde maneira (utilizando seu problema como exemplo):



Caso não dê certo, tente usar o a4j:keepAlive, pois talvez seja o problema de se perder nas requisições de páginas.
w1l14n
JavaBaby
[Avatar]

Membro desde: 11/07/2008 09:36:13
Mensagens: 92
Offline

Valeu pela ajuda diego.

Mas com o keepalive piorou o resultado.

Ele zerou a minha tabela.

O dia todo tentando fazer isso funcionar.

Java Rules!
SCJP 5
SCWCD 5
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1693
Online

Cara, é seguinte:
Toda vez que você usa a tag ajaxSingle="true" você "processa" SOMENTE esse componente, no caso de um a4j:support o componente pai dele, ou seja, será atribuido ao ManagedBean somente esse cara.
Isso é econômico quando você só quer passar esse cara mesmo, mas caso queira passar mais coisas pro ManagedBean você tem duas opções:

1 - tira a tag ajaxSingle="true", que por default é false;
2 - especifica na tag process="" os ids dos componentes que deseja processar, separados por vírgula, ai esses serão atribuidos ao ManagedBean;

Vale a pena estudar o conjunto das seguintes tags quando se usa a4j:
- ajaxSingle :processa somente esse componente e no caso de a4j:support o componente pai
- process : adiciona a lista de componentes processados os ids especificados aqui, separados por virgula
- ajaxRendered : presente nos a4j:outputPanel, que tem por default false e se setado true será reRenderizado a TODA requisição ajax;
- reRender : indica quais componentes você quer re-renderizar;
- limitToList : tem como padrão false, mas caso seja setado true limitará a lista especificada no reRender os componentes que serão re-renderizados e mesmo que haja algum com ajaxRendered="true" esse não será re-renderizado.

Cara, fica muito atento a essas 5 tags, se forem bem utilizadas da pra incrementar uma boa performance em ajax no seu sistema JSF, uma vez que carregará somente o necessário.
Demorei pra pegar a "sincronia" desses caras, infelizmente ninguém me alertou e aprendi na raça.
Recomendo usar o a4j:outputPanel com ajaxRendered = "true" somente quando tiver um <h:messages> ou <rich:messages> dentro dele, pra exibir a mensagem de erro sem que seja necessário especifca-lo em todo reRender.

Boa sorte!!!

ps: tem alguns componentes, como o selectOneMenu que não funcionam sempre quando tão no process de algum a4j quando estão em ModalPanels, é uma pena =/
w1l14n
JavaBaby
[Avatar]

Membro desde: 11/07/2008 09:36:13
Mensagens: 92
Offline

Tchello valeu pela explicação.

Mesmo tirando o ajaxSingle não funcionou.

Java Rules!
SCJP 5
SCWCD 5
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1693
Online

Troca isso:


Por isso:


E posta aqui o método atualizaDataTable preu dar uma olhada por favor.

Abraços.
Javabuntu
GUJ Master
[Avatar]

Membro desde: 08/02/2007 17:15:32
Mensagens: 1315
Localização: Brasília
Offline

Só pra teste faça o seguinte, no seu código original postado, coloque a parte do comboBox em um form <a4j:form> e a parte da tabela em outro form <a4j:form>... e no seu <a4j:support tire o ajaxSingle="true" porque não precisaria nesse caso...

SCJP 6
SCJD
SCWCD 5
Itil V2
[MSN]
w1l14n
JavaBaby
[Avatar]

Membro desde: 11/07/2008 09:36:13
Mensagens: 92
Offline

O método é este:



O método populaTabela é este:



Se montar o selectOneMenu sem o a4j:support... e usar um botão para fazer a mesma coisa funciona.

Java Rules!
SCJP 5
SCWCD 5
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1693
Online

Alterou o que sugeri ali em cima?
Experimente trocar o <h:form> por <a4j:form>.
w1l14n
JavaBaby
[Avatar]

Membro desde: 11/07/2008 09:36:13
Mensagens: 92
Offline

Galera fiz as modificações que vocês sugeriram e não funcionou.

Abaixo o código atual:


Aqui o método que popula a tabela:


E aqui o método que deveria ser chamado pelo a4j:support

Java Rules!
SCJP 5
SCWCD 5
w1l14n
JavaBaby
[Avatar]

Membro desde: 11/07/2008 09:36:13
Mensagens: 92
Offline

Resolvido.

apenas mudei o nome do método de getAtualizaDataTable

para atualizaDataTable

E funcionou.

Valeu pela ajuda.

Java Rules!
SCJP 5
SCWCD 5
Kleber-rr
Virtual Machine Man
[Avatar]

Membro desde: 02/07/2009 12:12:02
Mensagens: 664
Offline

w1l14n wrote:Resolvido.

apenas mudei o nome do método de getAtualizaDataTable

para atualizaDataTable

E funcionou.

Valeu pela ajuda.

Olá w1l14n, blz??

Cara, estava lendo seu post pra ver se me dava uma luz pra resolver meu problema q é muito parecido com o seu... tem como vc postar seu método getConsulta() da tua classe ParticipanteDao????

Me ajudaria muito.

Valeu!!!!

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