找不到带表达式的组件?

时间:2014-11-12 22:28:17

标签: java jsf primefaces

我使用了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>

我的代码有什么问题?

2 个答案:

答案 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中的建议)。