首页 > 解决方案 > 无法从同一 p:tab 中的另一个表单更新组件

问题描述

问题是,在添加 primefaces tabView 之前一切正常,我能够从第一个表单更新第二个表单,现在这个异常是用相同的代码引发的:

org.primefaces.expression.ComponentNotFoundException

这是代码:

<p:tab title="profils">

    <h:form class="searchForm">
            <h:outputText value="Recherche:" />
            <p:inputText id="globalFilter" value="#{profil.login}" onkeyup="myCommand();" 
      style="width:150px" placeholder="Filtrer par login"/>
            <p:remoteCommand name="myCommand" actionListener="#{profil.getTheProfils()}" 
                     update=":profilForm" style="display: none;" />
        </h:form>
    <br/>



    <h:form id="profilForm">
    <p:growl id="growl" showDetail="true" sticky="false" />  
    <h:panelGroup id="wrapper">
    <p:dataTable value ="#{profil.profils}" var ="p" rows="5"
             paginator="true"
             paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} 
                {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
             rowsPerPageTemplate="3,5,15" resizableColumns="true" style="margin-bottom:20px" 
             id="profilTable">

   <p:column headerText="Login">                    
      <h:inputHidden value = "#{profil.login}" size = "10" rendered = "#{edit.id eq p.login}" 
    class="form-control"/>                  
      <h:outputText value = "#{p.login}" rendered = "#{edit.id ne p.login}" />
   </p:column>
    </p:dataTable>
   </h:panelGroup>
   </h:form>


</p:tab>

我试过 update="profilTable" update=":profilForm:profilTable" update="@profilTable" ...

标签: jsfprimefaces

解决方案


p:tab分配在 a 中,p:tabView看起来像这样:

<p:tabView id="tabView">
    <p:tab>
        <h:form id="searchForm">
            <p:remoteCommand ... update="tabView:profilForm:profilTable" />
        </h:form>
    </p:tab>

    <p:tab>
        <h:form id="profilForm">
            <p:dataTable id="profilTable">
                ...
            </p:dataTable>
        </h:form>
    </p:tab>
</p:tabView>

这应该解决org.primefaces.expression.ComponentNotFoundException. 这个错误是因为 atabView是一个命名容器(见这个)。tabView只需在搜索表达式前面添加 id 即可修复此错误。


相关问题

JSF2/PrimeFaces 中的命名容器

如何找出用于 ajax 更新/渲染的组件的客户端 ID?找不到从“bar”引用的表达式“foo”的组件


推荐阅读