[Resolvido] Problema de AJAX no commandButton

Bom dia amigos…

escou com um grave problema, mas creio que foi a falta de conhecimento em AJAX.

Tenho um commandButton (primefaces) e estou querendo que ao clicar, ele atualize apenas a parte dos grids. O problema é que está me apresentando o seguinte erro ao ENTRAR na pagina XHTML.

[code]exception

javax.servlet.ServletException: <f:ajax> contains an unknown id ‘:frmGrids’ - cannot locate it in the context of the component j_idt39
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)[/code]

Estou posando também o código XHTML, apesar de extenso, talvez há alguma melhoria que alguém possa manifestar…

<p:tab title="Caracterísitcas"> <h:form id="frmCaract"> <h:outputLabel style="width: 200px;" value="Caracterísitca da Ocorrência: " /> <h:selectOneMenu styleClass="dropMedio" value="#{ocorrenciasBean.idCaracteristica}"> <f:selectItem itemLabel="Escolha a Característica..." itemValue="" noSelectionOption="true" /> <f:selectItems value="#{caractOcorrenciaBean.dataModel}" var="caract" itemValue="#{caract.id}" itemLabel="#{caract.descCaractOcorrencia}" /> </h:selectOneMenu> <p:commandButton style="margin-left: 5px;" value="Guardar Característica" title="Guardar Característica" action="#{ocorrenciasBean.guardaCaract}"> <f:ajax render=":frmGrids" /> </p:commandButton> </h:form> <h:form id="frmGrids"> <h:panelGroup id="panCaract" rendered="#{not empty ocorrenciasBean.ocorrencia.ocorrenciaCaracteristica}"> <fieldset> <h2>Caracterísitcas da Ocorrência</h2> <p:dataTable value="#{ocorrenciasBean.ocorrencia.ocorrenciaCaracteristica}" var="caract" styleClass="dados" rowStyleClass="#{empty rowIx or rowIx mod 2 eq 0 ? 'impar' : 'par'}" rowIndexVar="rowIx"> <p:column style="width:50%;" headerText="Característica" sortBy="#{caract.caractOcorrencia.descCaractOcorrencia}"> #{caract.caractOcorrencia.descCaractOcorrencia}</p:column> <p:column headerText="Ações"> </p:column> </p:dataTable> </fieldset> <div class="Spacer"></div> </h:panelGroup> </h:form> </p:tab>

Cara,eu acho q o problema é que o nome do componente é ‘frmGrids’ e vc tá botando ‘:frmGrids’ ,com esse “:” na frente.

Se a dica do raf4ever naõ funcionar, eu acho que o problema ta no <h:form id=“frmGrids”> estar dentro do <p:tab title=“Caracterísitcas”>.

Coloque um id pro p:tab e aí chame :meuPanel:frmGrids (Não me lembro se é a sintax correta, mas tenta assim ou algo do tipo).

Em ambas eu fiz a alteração e restartei o tomcat…

Nem do jakefrog

[code]exception

javax.servlet.ServletException: <f:ajax> contains an unknown id ‘:panCaract:frmGrids’ - cannot locate it in the context of the component j_idt38
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)[/code]
Nem do raf4ever

[code]description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: <f:ajax> contains an unknown id ‘frmGrids’ - cannot locate it in the context of the component j_idt38
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)[/code]

Mas você tem que ver que todo componente que tenha um ID ele deve ser adicionado no update.

Você teria que colocar os 3 ids antes de chegar ao form.

Já tentou colocar no seu h:form um prependId=“false” ?

<h:form id="frmCaract" prependId="false">

Ele vai deixar vc acessar os atributos diretamente , sem usar o id do form que é um naming container…

ai vc chama ele normal:

:frmCaract

[quote=thales_biolck]Já tentou colocar no seu h:form um prependId=“false” ?

<h:form id="frmCaract" prependId="false">

Ele vai deixar vc acessar os atributos diretamente , sem usar o id do form que é um naming container…

ai vc chama ele normal:

:frmCaract[/quote]Mas aí até o código do panel são ignorados?

tinha me esquecido panel… entao vc vai ter que colocar um prependId=“false” tambem dentro do p:panel

tinha me esquecido panel… entao vc vai ter que colocar um prependId=“false” tambem dentro do p:panel

[quote=thales_biolck]tinha me esquecido panel… entao vc vai ter que colocar um prependId=“false” tambem dentro do p:panel[/quote]Sabia dessa opção para panel não, achava que só existia para form.

Legal. [=

Boa tarde. Consegui uma solução conforme o código abaixo.

<p:commandButton ajax="false" style="margin-left: 5px;" value="Guardar Característica" title="Guardar Característica" action="#{ocorrenciasBean.guardaCaract}"> <f:ajax render=":frmGrids" /> </p:commandButton>

O que acontece é que o ajax do commandButton acaba sobrescrevendo o que você está tentando fazer dentro dele. Aí precisamos desabilitar o externo para que o interno funcione.