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! :(
Segue o trecho do código da página:
<h:form id="meuForm">
<table class="tabelaForm">
<tr>
<td>Tipo:</td>
<td><h:selectOneRadio id="fieldTipo" value="#{bean.idTipo}">
<f:selectItem itemValue="0" itemLabel="Nenhum"></f:selectItem>
<f:selectItem itemValue="1" itemLabel="Tipo 1"></f:selectItem>
<f:selectItem itemValue="2" itemLabel="Tipo 2"></f:selectItem>
<a4j:support event="onclick" action="#{bean.selectTipo}" reRender="outPanel1,outPanel2"></a4j:support>
</h:selectOneRadio></td>
</tr>
<tr>
<td> </td>
<td><a4j:outputPanel id="outPanel1"><h:panelGroup id="panel1" rendered="#{bean.show1}">
<h:selectOneMenu id="field1" value="#{bean.id1}">
<f:selectItem itemLabel="" itemValue="-1" />
<f:selectItem itemLabel="asdas" itemValue="1" />
</h:selectOneMenu></h:panelGroup></a4j:outputPanel>
<a4j:outputPanel id="outPanel2"><h:panelGroup id="panel2" rendered="#{bean.show2}">
<table>
<tr>
<td>Nome:</td>
<td><h:inputText id="fieldNome" value="#{bean.nome}"></h:inputText></td>
</tr>
<tr>
<td colspan="2"><a4j:commandButton value="Inserir" reRender="tabela" action="#{bean.inserir}"></a4j:commandButton></td>
</tr>
<tr>
<td colspan="2"><h:dataTable id="tabela" value="#{bean.nomes}" var="valor">
<h:column>
<f:facet name="header">Nome</f:facet><h:outputText value="#{valor.nome}"></h:outputText>
</h:column>
</h:dataTable></td>
</tr>
</table>
</h:panelGroup></a4j:outputPanel></td></tr>
</table>
</h:form>
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