我使用了DataTable - 来自主要面孔的行选择来显示用户列表,当我运行页面时,我遇到了这个错误
找不到带表达式的组件":dialog1:employes"引自" dialog1:j_idt43:j_idt51"
<h:form id="dialog1">
<p:accordionPanel>
<p:tab title="nouveau Groupe">
<h:panelGrid columns="2">
<h:outputLabel value="nom groupe" />
<p:inputText value="#{CalCulJobsBean.libelle}" />
</h:panelGrid>
<p:commandButton value="submit"
action="#{CalCulJobsBean.ajouter()}" icon="ui-icon-check"
style="margin-left: 40%"
oncomplete="PF('DialogAddGroupesalriers').hide()" />
</p:tab>
<p:tab title="liste Salariers">
<h:outputLabel value="Matricule:" />
<p:inputText value="#{donneesIndividuellesBean.matricule}"
onkeypress="if (event.keyCode == 13) {onchange(); return false; }">
<p:ajax event="change"
listener="#{donneesIndividuellesBean.chercherEmployesByMatricule()}"
update=":dialog1:employes" />
</p:inputText>
<!-- <p:commandButton icon="ui-icon-plus fa fa-plus"
onclick="PF('dialog1').show()" update=":formdialog1">
</p:commandButton> -->
<p:commandButton icon="ui-icon-plus fa fa-plus"
onclick="PF('dialog2').show()" update=":formdialog1">
</p:commandButton>
<p:panel header="liste des salariers">
<h2>select + to add</h2>
<p:dataTable id="employes"
value="#{donneesIndividuellesBean.employesCherches}" var="emp"
selection="#{donneesIndividuellesBean.identiteSelectionne}"
rowKey="#{emp.numedoss}" selectionMode="single">
<f:facet name="header">
</f:facet>
<!-- <p:ajax event="rowSelect"
execute="@this"
update=":employe" /> -->
<p:column style="width:40px">
<p:graphicImage value="#{donneesIndividuellesBean.photoE}" cache="false"
id="dragImg" style="width:30px; height:40px;">
<f:param name="empid" value="#{emp.numedoss}" />
<p:draggable for="dragImg" revert="true" helper="clone" />
</p:graphicImage>
</p:column>
<p:column headerText="Matricule">
<h:outputText value="#{emp.matricul}" />
</p:column>
<p:column headerText="Nom">
<h:outputText value="#{emp.nom}" />
</p:column>
<p:column headerText="Prenom">
<h:outputText value="#{emp.prenom}" />
</p:column>
</p:dataTable>
</p:accordionPanel>
</h:form>
</p:dialog>
我的代码有什么问题?
答案 0 :(得分:1)
通常,只要开发人员没有自动生成特定的组件ID,JSF就会生成组件ID。因此,您应该<p:accordionPanel>
的特定ID自动跳过生成。
如果<p:accordionPanel id="ac">
有id="ac"
,您可以update=":dialog1:ac:employes"
答案 1 :(得分:1)
JSF / PrimeFaces中的一些组件实现了NamingContainer
inerface。此类组件会影响其子项的客户端ID的生成方式。此类组件的示例包括<h:form>
(HtmlForm
类)和<p:accordionPanel>
(AccordionPanel
类)。虽然你似乎意识到前者,但你并不知道后者也是一个命名容器。
当您想要AJAX更新给定组件时,您需要指定其ID,以防它位于相对于同一命名容器或其客户端ID,以防万一它相对于视图根的。将它绑定到您的视图结构,我们得到update =&#34;:formId:accordionPanelId:dataTableId&#34;。
要关注的最后一个问题是每个组件必须具有一个id ,以便可以在组件树中找到它并且肯定是唯一的。如果您提供自己的ID,例如id="myComponentId"
,,您将为组件设置ID 。否则,JSF框架将为您自动生成组件 id :这就是为什么要记录这些j_idt43
ID。
总而言之,您需要为您的折叠面板明确指定ID,并将其包含在您要更新的组件的路径中(完全按照wittakarn's answer中的建议)。