f:ui中的ajax:重复,组件的未知id

时间:2011-08-17 05:20:08

标签: jsf-2

当我尝试通过ajax调用渲染panelGroup时,它会给出未知的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>

当我尝试使用此代码时,它会给出未知的id panel1。我尝试了id“:panel1”。我得到了同样的错误。

2 个答案:

答案 0 :(得分:20)

相对客户端ID(即不以:开头)是相对于当前父NamingContainer组件的。 <ui:repeat>也是NamingContainer。因此render="panel1"正在<ui:repeat>的上下文中查找组件。这不会起作用。绝对客户端ID(即以:开头)正在查看视图根上下文中的组件。但你把它放在<h:form>里面 - 而这又是另一个NamingContainer组件 - 所以render=":panel"也无效。

以下内容应该有效,删除prependId="false"以便您可以参考:

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

顺便说一下,如果实际上想要只渲染 表,那么你应该这样做:

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

更新:根据评论,您发现已通过配置将JSF默认NamingContainer分隔符从:更改为_。在这种情况下,您需要在客户端ID选择器中使用_而不是:

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

答案 1 :(得分: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> 
问题: 请参考上面的代码,他们在控制台上也不例外,但是当我看到这个帖子类似的概念被使用时,ajax listerner将不会调用我只是放置了exceute =“@ form”然后我的编码工作正常

溶液:

execute="@form"