f:ajax within ui:repeat, unknown id for the component [duplicate]

这一生的挚爱 提交于 2019-12-30 01:24:06

问题


When I try to render a panelGroup by an ajax call, it gives unknown id.

<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>

When I tried this code, it gives unknown id panel1. I tried with id ":panel1" too. I get the same error.


回答1:


A relative client ID (i.e. not starting with :) is relative to the current parent NamingContainer component. The <ui:repeat> is also a NamingContainer. So the render="panel1" is looking for the component within the context of <ui:repeat>. This isn't going to work. An absolute client ID (i.e. starting with :) is looking for the component within the context of view root. But you've it inside a <h:form> -which is in turn another NamingContainer component-, so the render=":panel" is also not going to work.

The following should work, with prependId="false" removed so that you can refer it:

<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>

By the way, if you actually want to render only the table, then you should be doing this:

<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>

Update: as per the comments, it turns out that you have changed the JSF default NamingContainer separator character from : to _ by configuration. In that case, you need to use _ instead of : in the client ID selector.

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



回答2:


<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> 

problem : please refer above with above code their is no exception on console but the ajax listerner will not invoke when I saw this post similiar kind of concept being use just I was place the exceute="@form" then my coding is working fine

solution:

execute="@form"



来源:https://stackoverflow.com/questions/7088273/fajax-within-uirepeat-unknown-id-for-the-component

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!