JSF 2 + Ajax - atributo render nao encontra o ID do componente

4 respostas
rafabh3

Olá pessoal boa tarde!!

Estou com um problema para renderizar uma página xhtml no navegador, isso porque eu tenho um botao de busca que deve rendrizar o resultado em um dataTable através do ajax, mas ele nao está encontrando o id do panelGrid onde está o dataTable.

Segue o código para que entendam melhor:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                template="./template_nivel_organizacional.xhtml">
    
    <ui:define name="content">
        <h:form>
            <h2>Níveis Organizacionais</h2>
            <br/>
            &lt;h:inputText id="buscaNO" value="#{nivelOrganizacionalController.nome}" style="width: 40%;"/&gt;&nbsp;
            &lt;h:commandButton value="Buscar"&gt;
                &lt;f:ajax execute="buscaNO" listener="#{nivelOrganizacionalController.buscarPorNome}" render=":niveisOrganizacionaisWrapper" /&gt;
            &lt;/h:commandButton&gt;
        &lt;/h:form&gt;
        
        <br/>
        
        &lt;h:panelGroup id="niveisOrganizacionaisWrapper"&gt;

        &lt;h:dataTable value="#{nivelOrganizacionalController.nivelOrganizacionalList}" var="nivelOrganizacional"&gt;
            &lt;h:column&gt;
                &lt;f:facet name="header"&gt;
                    &lt;h:outputText value="Nome"/&gt;
                &lt;/f:facet&gt;
                <a >
                    &lt;h:outputText value="#{nivelOrganizacional.nome}"/&gt;
                </a>&nbsp;
            &lt;/h:column&gt; 
        &lt;/h:dataTable&gt;
        
        &lt;/h:panelGroup&gt;
    &lt;/ui:define&gt;

    
&lt;/ui:composition&gt;

Abaixo também o Stack Trace

javax.faces.FacesException: &lt;f:ajax&gt; contains an unknown id ':niveisOrganizacionaisWrapper' - cannot locate it in the context of the component j_idt20
	at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getResolvedId(AjaxBehaviorRenderer.java:285)
	at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.appendIds(AjaxBehaviorRenderer.java:272)
	at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.buildAjaxCommand(AjaxBehaviorRenderer.java:214)
	at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getScript(AjaxBehaviorRenderer.java:86)
	at javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBehaviorBase.java:103)
	at com.sun.faces.renderkit.RenderKitUtils.getSingleBehaviorHandler(RenderKitUtils.java:1607)
	at com.sun.faces.renderkit.RenderKitUtils.renderHandler(RenderKitUtils.java:1700)
	at com.sun.faces.renderkit.RenderKitUtils.renderOnclick(RenderKitUtils.java:451)
	at com.sun.faces.renderkit.html_basic.ButtonRenderer.encodeBegin(ButtonRenderer.java:166)
	at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:619)

Agradeço desde já pelas possíveis ajudas, serao de grande valia. Obrigado!

4 Respostas

G

Cara, dê uma olhada no código fonte gerado e veja como esta o id do componente “niveisOrganizacionaisWrapper”. Tente colocar esse id que você encontrar no fonte gerado.

rafabh3

giulianocosta, antes de tudo obrigado pela atençao!! Nao sei se entendi direito o que vc quis dizer mas o id já está no código.

No botao de busca:

&lt;h:commandButton value="Buscar"&gt; &lt;f:ajax execute="buscaNO" listener="#{nivelOrganizacionalController.buscarPorNome}" render=":niveisOrganizacionaisWrapper" /&gt; &lt;/h:commandButton&gt;

E no panelGrid onde o resultado deve ser renderizado:

Por isso nao entendo porque ele nao está encontrando o id. Obrigado!!!

G

Veja como ficou o html gerado do componente &lt;h:panelGroup id="niveisOrganizacionaisWrapper"&gt;. Você pode colocá-lo aqui para vermos?

rafabh3
&lt;h:panelGroup id="niveisOrganizacionaisWrapper"&gt;  
  
        &lt;h:dataTable value="#{nivelOrganizacionalController.nivelOrganizacionalList}" var="nivelOrganizacional"&gt;  
            &lt;h:column&gt;  
                &lt;f:facet name="header"&gt;  
                    &lt;h:outputText value="Nome"/&gt;  
                &lt;/f:facet&gt;  
                <a >  
                    &lt;h:outputText value="#{nivelOrganizacional.nome}"/&gt;  
                </a>   
            &lt;/h:column&gt;   
        &lt;/h:dataTable&gt;  
          
        &lt;/h:panelGroup&gt;

Este é o panel que deve ser renderizado, mas quando eu abro a pagina ele nao encontra o id dele, do panelGroup.

Criado 30 de janeiro de 2012
Ultima resposta 30 de jan. de 2012
Respostas 4
Participantes 2