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.