2011-08-17 16 views
6

Cuando trato de representar un panelGroup por una llamada ajax, se obtiene una identificación desconocida.f: ajax dentro de la interfaz de usuario: repetir, identificación desconocida para el componente

<h:form id="form1" prependId=false> 
    <h:panelGroup id="panel1"> 
     <h:dataTable/> 
     <ui:repeat value="#{bean.page}" var="page"> 
      <h:commandLink value="#{page}"> 
       <f:ajax execute="@form" render="panel1" listener="#{bean.page}" /> 
      </h:commandLink> 
     </ui:repeat> 
    </h:panelGroup>  
</h:form> 

Cuando probé este código, da un panel ID desconocido1. Intenté con id ": panel1" también. Me sale el mismo error.

+0

¿Por qué se edita el código para mover el ' 'al otro lado? – BalusC

+0

El ui: repeat está dentro del panelGroup. Entonces, tuve que moverme al otro lado. – user679526

+0

Está bien, también editaré el fragmento de código en mi respuesta. Pero la respuesta técnica sigue siendo la misma. – BalusC

Respuesta

19

Un ID de cliente relativo (es decir, no se inicia con :) es relativo al componente principal actual NamingContainer. El <ui:repeat> también es un NamingContainer. Entonces, el render="panel1" está buscando el componente en el contexto de <ui:repeat>. Esto no va a funcionar. Una ID de cliente absoluta (es decir, comenzando con :) está buscando el componente dentro del contexto de la vista raíz. Pero lo tiene dentro de un <h:form>, que a su vez es otro componente NamingContainer, por lo que el render=":panel" tampoco funcionará.

lo siguiente debe funcionar, con prependId="false" retirado para que pueda remitirla:

<h:form id="form1"> 
    <h:panelGroup id="panel1"> 
    <h:dataTable/> 

    <ui:repeat value="#{bean.page}" var="page"> 
     <h:commandLink value="#{page}"> 
     <f:ajax execute="@form" render=":form1:panel1" listener="#{bean.page}" /> 
     </h:commandLink> 
    </ui:repeat> 
    </h:panelGroup> 
</h:form> 

Por cierto, si realidad desea representar única la mesa, entonces debería estar haciendo esto :

<h:form id="form1"> 
    <h:panelGroup> 
    <h:dataTable id="table1" /> 

    <ui:repeat value="#{bean.page}" var="page"> 
     <h:commandLink value="#{page}"> 
     <f:ajax execute="@form" render=":form1:table1" listener="#{bean.page}" /> 
     </h:commandLink> 
    </ui:repeat> 
    </h:panelGroup> 
</h:form> 

actualización: según los comentarios, resulta que ha cambiado el carácter de separador NamingContainer predeterminado de JSF de : a _ por configuración. En ese caso, debe usar _ en lugar de : en el selector de ID del cliente.

<f:ajax execute="@form" render="_form1_panel1" listener="#{bean.page}" /> 
+0

Quité prependId = "false" para la etiqueta del formulario. Obtengo la excepción, javax.faces.FacesException: contiene un ID desconocido ': form1: panel1' - no puede ubicarlo en el contexto del componente j_idt228. – user679526

+0

Entonces el '' está aparentemente localizado en otro componente 'NamingContainer'. Haga clic con el botón derecho en la página en el navegador, haga * Ver fuente * y busque '' y use exactamente esa identificación con ':' prefijado. – BalusC

+0

se encuentra en . ¿Hay alguna manera de averiguar en qué contenedor de nombres se encuentra? – user679526

0
<ui:repeat value="#{interaction.interactionListBean}" var="interactionItr"> 

    <h:commandLink value="#{interactionItr.interactionDate}" styleClass="#{interaction.createImage}" style="margin:0 5px 5px 0!important; display:inline-block;"><br/> 
     <f:ajax render=":formId:interactionDate :formId:category :formId:activity :formId:status :formId:channel :formId:status1 :formId:caseId :formId:comment :formId:user1 :formId:team :formId:user :formId:transit " 
        listener="#{interactionController.interactionDetailGet}"/> 
     <f:param name="RefId" value="#{interaction.interactionRefId}"/> 
    </h:commandLink> 

</ui:repeat> 

problema: remítase anterior con el código de su no es una excepción en la consola pero el listerner ajax no invocará cuando vi este post tipo similar de concepto que se uso solo yo era el lugar del exceute = fina solución

"@form" entonces mi codificación está funcionando:

execute="@form"

Cuestiones relacionadas