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

use*_*526 6 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>
Run Code Online (Sandbox Code Playgroud)

当我尝试这段代码时,它会给出未知的id panel1.我尝试了id":panel1".我犯了同样的错误.

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你确实想渲染表,那么你应该这样做:

<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>
Run Code Online (Sandbox Code Playgroud)

更新:根据意见,事实证明,你已经改变了JSF默认NamingContainer的分隔符:,以_通过配置.在这种情况下,您需要使用_而不是:在客户端ID选择器中.

<f:ajax execute="@form" render="_form1_panel1" listener="#{bean.page}" />
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

10267 次

最近记录:

9 年,8 月 前