a4j:commandButton não funciona

Olá lista,

Em uma página, tenho um h:panelGroup que está dentro de um a4j:outputPanel. Esse panel é renderizado de acordo com a escolha de um radio com support ajax. Dentro desse h:panelGroup eu tenho uns 3 campos e um a4j:commandButton. O problema é que quando aciono esse botão, nada acontece.

Será que nesse caso eu preciso de um subForm, ou um a4j:form???

Bom, minha dúvida parece simples, mas eu já fiz um exemplo simples usando h:form e a4j:commandButton e funcionou sem problemas. Ae adicionei os campos em um a4j:outputPanel e um h:panelGroup para ficar parecido com o meu problema real e também funcionou. A única coisa diferente é que no meu problema real, eu renderizo os panel após clicar em um radio button com ajax support.

Obrigada,

Liss, poste o código pra gente ver como ta certinho, mas pelo que vc falou é alguma coisa parecido com o que eu já tive no meu projeto. Vc já tentou ao invés de usar um outpuPanel, somente usar a propriedade reRender do a4j:commandButton??? aguardo o código…

Olá, 22-Gers…

Eu estou usando o a4j:outputPanel pois estou usando um radio com ajax support para mostrar ou não um outro panel. Antes eu não estava usando ele, apenas o panelGroup e não dava certo. Ae escrevi em alguma lista e uma pessoa me indicou a usar o a4j:outputPanel e só assim funcionou. Depois li na documentação do richfaces sobre isso e eles indicaram a mesma coisa.

Dá uma olhadinha no código abaixo: Quando o usuário clicar no radio de tipo 1, deve ser mostrado o panel 1 que tem apenas um combo. Se ele clicar no radio de tipo 2, deve ser mostrado um campo, um botão de inserção e uma tabela. Esse botão é o a4j:commandButton. Quero inserir esse campo via ajax e atualizar apenas a tabela (e não a página inteira).

Já tentei usar outro método para o action do a4j:commandButton e também não funcionou. Simplesmente, qualquer método que eu chamar pelo action está sendo ignorado! :frowning:

Segue o trecho do código da página:

[code]
<h:form id=“meuForm”>

Tipo:
 
Nome:
Nome
[/code]

Segue o trecho do código do Managed-bean:

public String selectTipo() {
 if (this.getIdTipo() == null) {
  this.show1 = false;
  this.show2 = false;
 } else {
  if (this.getIdTipo().equals("1")) {
   this.show2 = false;
   this.show1 = true;
  } else if (this.getIdTipo().equals("2")) {
   this.show2 = true;
   this.show1 = false;
  }
 }
 return null;
}

public String inserir() {
 this.getNomes.add(new Bean(this.getNome));
 return null;
}

[]s

Pessoal,

Fiz vários testes aqui até que achei uma situação onde o botão realmente não funciona.
Se eu deixar os a4j:outputPanel e os h:panelGroup, funciona apenas se o rendered do panelGroup for sempre true. Como eu estou fazendo ele aparecer dinâmicamente, dou um binding num boolean que está no meu managed-bean. Ae nesse caso, o a4j:commandButton não funciona!!!

Existe algum problema em usar um a4j:commandButton em um a4j:outputPanel???
Vou procurar algo no google!

[]s

Liss, no meu projeto eu usei uma coisa parecida, mas ao invés de radio eu usei checkBox. Funcionou normalmente. Ta quase igual o seu, a diferença é que eu dou um reRender no form, e não no panel. Mas era pra funcionar, seu código está correto. Eu estou com um problema parecido usando gráficos. o a4j:support tem hora q não funciona, também não sei pq. Vc poderia tentar usar a4j:commandButton ao invés de radio button.Mas perde um pouco a funcionalidade. Se vc conseguir corrigir o problema posta aqui pra eu ver. até

Oi 22-Gers…

Agora eu fiz o seguinte. Coloquei os campos e a tabela dentro de um a4j:region. Aí sim o método no managed-bean é chamado. O problema agora é que a tabela não é atualizada.

O a4j:commandButton está setado para dar um reRender nela, mas não está funcionando!

Aiai, cada hora é uma coisa! :smiley:

[]s

oi Liss, vc ta colocando reRender direto no componente??? se for isso não vai funcionar mesmo. Vc tem que renderizar um outpuPanel que tenha sua tabela dentro. Comigo funcionou já assim. Mas to com um problema com um evento de um gráfico. Ele não chama o método de jeito nenhum. Até tentei fazer da maneira q vc falou, usando a4j:region mas não funciona. Acho que é bug do componente.

boa sorte aí… até

Então.

Consegui fazer funcionar, mas sinceramente não sei se é o jeito certo!
Fiz o que você falou, de colocar a tabela dentro de um a4j:outputPanel. E mesmo assim não funcionou. Achei estranho, pois eu já tinha feito um exemplo onde eu atualiza direto a tabela.

Depois fiz um outro teste: alterei o escopo do managed-bean de request para session e walla!!! Funcionou!!!
Como eu quero deixar os escopos dos managed-beans como request, usei o componente do tomahawk, o saveState, passando como parâmetro o próprio managed-bean e finalmente funcionou!!!

[]s

Pessoal,

Tive o mesmo problema citado acima.
A action do botão não funcionava se o rendered fosse vinculado a uma expressão.

Para funcionar, utilizei a tag <a4j:keepAlive />

Segue abaixo um trecho do meu código:

&lt;f:view&gt;
  &lt;h:form id="formCliente"&gt;
    &lt;a4j:keepAlive beanName="clienteBean" /&gt;
    ...
    &lt;a4j:commandButton 
       action="#{clienteBean.excluir}" 
       value="#{msg['botao.excluir']}" 
       reRender="formCliente" 
       rendered="#{clienteBean.cliente.id &gt; 0}" 
    /&gt;
    ...
  &lt;/h:form&gt;
&lt;/f:view&gt;

[quote=marcioferlan]Pessoal,

Tive o mesmo problema citado acima.
A action do botão não funcionava se o rendered fosse vinculado a uma expressão.

Para funcionar, utilizei a tag <a4j:keepAlive />

Segue abaixo um trecho do meu código:

&lt;f:view&gt; &lt;h:form id="formCliente"&gt; &lt;a4j:keepAlive beanName="clienteBean" /&gt; ... &lt;a4j:commandButton action="#{clienteBean.excluir}" value="#{msg['botao.excluir']}" reRender="formCliente" rendered="#{clienteBean.cliente.id &gt; 0}" /&gt; ... &lt;/h:form&gt; &lt;/f:view&gt; [/quote]

Resolveu o meu problema, obrigado.

Mais aí pessoal, alguém sabe dizer porque isso acontece?
Algum bug?