[RESOLVIDO]a4j e mensagens de validação

5 respostas
D

Opa :smiley:

Quando utilizo tags como a4j:form ou a4j:commandoButton, notei que as mensagens de erro não são renderizadas e, as vezes, acaba não rolando validação na tela. Alguém sabe como posso resolver isso?

Valeuu

[]'s

5 Respostas

rponte

Coloque o componente h:messages dentro de um a4j:outputPanel e mande reRenderizar o componente.

D

Bom dia rponte

Coloquei da seguinte maneira:

<h:panelGroup>
....
<a4j:region>
<a4j:commandButton reRender="tabelaVeiculos, painelMensagensAjax" rendered="#{profissional.exibirSubviewCaminhoes}" action="#{profissional.addVeiculo}" styleClass="botao" value="Adicionar Outro Caminhao"/>
</a4j:region>
...
</h:panelGroup>
....
<tr>
<td>
<a4j:outputPanel id="painelMensagensAjax">
<h:messages />
</a4j:outputPanel>
</td>
</tr>

Porém ele não é renderizado e/ou as mensagens não estão sendo lançadas. Se eu alterar para um h:commandButton, ele exibe que os campos não foram preenchidos e não executa a parte de reRenderizar a tabela ( isso seria o correto, não reRenderizar se tiver erro de validação ), mas com o a4j:commandButton ele renderiza numa boa e não exibe a mensagem de erro.

Se eu altero para:

<h:commandButton rendered="#{profissional.exibirSubviewCaminhoes}" action="#{profissional.addVeiculo}" styleClass="botao" value="Adicionar Outro Caminhao">
<a4j:support reRender="tabelaVeiculos, painelMensagensAjax" event="onclick"></a4j:support>
</h:commandButton>

Funciona corretamente, pq ele primeiro valida antes de fazer a chama da ação addVeiculo e eu gostaria que com o ajax fosse assim tb!

Existe alguma forma de só ser executado o ajax se for validado antes?

[]'s

rponte

davidpadilha:
Bom dia rponte

Coloquei da seguinte maneira:

<h:panelGroup>
....
<a4j:region>
<a4j:commandButton reRender="tabelaVeiculos, painelMensagensAjax" rendered="#{profissional.exibirSubviewCaminhoes}" action="#{profissional.addVeiculo}" styleClass="botao" value="Adicionar Outro Caminhao"/>
</a4j:region>
...
</h:panelGroup>
....
<tr>
<td>
<a4j:outputPanel id="painelMensagensAjax">
<h:messages />
</a4j:outputPanel>
</td>
</tr>

Porém ele não é renderizado e/ou as mensagens não estão sendo lançadas. Se eu alterar para um h:commandButton, ele exibe que os campos não foram preenchidos e não executa a parte de reRenderizar a tabela ( isso seria o correto, não reRenderizar se tiver erro de validação ), mas com o a4j:commandButton ele renderiza numa boa e não exibe a mensagem de erro.

Existe alguma forma de só ser executado o ajax se for validado antes?

[]'s

Estranho, os componentes do Ajax4jsf por padrão passam pelo mesmo ciclo de vida, porém através de AJAX. O valor de #{profissional.exibirSubviewCaminhoes} está sempre como true?

D

Não, quando ele entra na página está como false, o usuário seleciona a opção que quer incluir um veículo ai eu reRenderizo a tela e exiboi o botão e a tela de veículo. O problema está na validação pq ela não está sendo executada quando faço a chamada ajax.

D

Consegui resolver.

O problema estava pq o botão ajax estava entre as tags a4j:region</a4j:region> e quando eu submetia, ele não passava por nenhum processo de validação!

Obrigado pela ajuda rponte

[]'s

Criado 14 de julho de 2008
Ultima resposta 15 de jul. de 2008
Respostas 5
Participantes 2